熟悉.Net资源文件体系的人都知道,中立资源程序集(Neutral Resource Assembly)的作用在于,一旦指定语言文化(Culture)的资源查找不到,便会Fallback到中立资源程序集。因此显式指定一个中立资源程序集很重要。
在每个工程的Properties文件夹下都有一个AssemblyInfo.cs文件,打开此文件,添加以下代码:
[assembly: NeutralResourcesLanguageAttribute( "en" , UltimateResourceFallbackLocation.MainAssembly)] |
NeutralResourcesLanguageAttribute类指定了当前程序集使用的中立资源程序集的语言文化是什么(参数1),以及去哪里查找这个中立资源程序集(参数2)。参数2是一个枚举,有两个值,一个是MainAssembly,也就是当前程序集,另外一个是Satellite,也就是卫星程序集。
但是在Silverlight工程中,当第二个参数设置为Satellite的时候,应用程序启动会抛异常。即使VS确实已经把该中立资源程序集打包到Xap中相应的文件夹里头了(需要设置csproj文件中的SupportedCultures,细节参考Silverlight 2 RTM 多国语言支持),而普通的.Net程序集则没有此问题。
在Silverlight论坛上咨询了一下,有个微软的哥们测试了半天终于发现了其中的奥秘,就是需要Edit一下Silverlight工程文件,在PropertyGroup节下添加:
<PropertyGroup>
<UICulture>en</UICulture>
........
.......
其中的en就是我们在AssemblyInfo.cs中传给NeutralResourcesLanguageAttribute的参数1。
参考贴:http://forums.silverlight.net/post/588767.aspx
感谢发帖人Jerry Weng的无私钻研~~
== Kevin Yang ==