Silverlight中无法设置卫星程序集为中立资源程序集

 

熟悉.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 ==

你可能感兴趣的:(silverlight)