Silverlight无法获取资源程序集

时间:2012-01-19 17:27:13

标签: silverlight deployment tfs

我们使用.NET资源管理器来本地化我们的Silverlight应用程序,并希望将德语(“de”)的附属程序集嵌入到XAP文件中。因此,我们将中性语言设置为“en”,并将“de”添加到csproj文件中支持的语言列表中。当我们在本地构建项目时,这很好。如果我们使用MSBuild(TFS)构建Silverlight解决方案,Silverlight将尝试使用来自/ClientBin/de/*.dll的HTTP请求来获取附属程序集,而不是将这些文件嵌入到XAP中(确实存在)。由于Web服务器为不存在的文件返回404错误代码,因此Silverlight因初始化错误而崩溃。

事实证明,如果我们删除操作程序集信息代码文件的自定义TFS构建活动,Silverlight应用程序将按预期工作。奇怪的是,在重新启用活动之后,编译的XAP应用程序仍然可以工作(验证了在单独分支上工作的两个不同的构建定义)。自定义活动操纵装配属性AssemblyConfigurationAssemblyCompanyAssemblyProductAssemblyCopyrightAssemblyTrademarkAssemblyVersionAssemblyFileVersion

其他一些提示:

  • 自定义活动将在任何编译完成之前更改程序集信息文件
  • 使用Visual Studio编译操作源将构建一个可用的XAP
  • XAP文件的内容(工作和不工作)是相同的(几乎相同的大小,清单文件没有区别)
  • 使用ResourceManager("Resource", Assembly.GetExecutingAssembly())
  • 实例化资源管理器

我的问题是:

  • 为什么Silverlight会尝试从/ClientBin/de/获取这些附属程序集而不是仅使用XAP文件中的附件?
  • 汇编信息文件中的哪种属性可能会导致此类行为?
  • 为什么重新启用版本控制活动不会再次破坏XAP?

1 个答案:

答案 0 :(得分:1)

以下是解决方案:我们使用名为“Total Commander”的工具编辑生成的XAP中的文件,以调整(通用)客户端连接到的URL。由于我们添加了本地化dll,因此使用Total Commander编辑XAP将导致上述行为。如果我们使用WinRAR或内部Windows归档管理器操作XAP,则所有操作均按预期工作。

编辑:在比较我们找到的XAP文件后,Total Commander使用反斜杠(\)分隔目录,而WinRAR和Silverlight工具使用斜杠({{1} })。我们似乎在这里发现了一个隐藏的Silverlight功能; - )