【发布时间】:2012-01-19 17:27:13
【问题描述】:
我们使用 .NET 资源管理器来本地化我们的 Silverlight 应用程序,并希望将德语 (“de”) 的附属程序集嵌入到 XAP 文件中。因此,我们将中性语言设置为“en”,并将“de”添加到 csproj 文件中支持的语言列表中。当我们在本地构建项目时,这很好用。如果我们使用 MSBuild (TFS) 构建 Silverlight 解决方案,Silverlight 将尝试使用来自 /ClientBin/de/*.dll 的 HTTP 请求获取附属程序集,而不是将这些文件嵌入到 XAP(确实存在)中。由于网络服务器为不存在的文件返回 404 错误代码,因此 Silverlight 崩溃并出现初始化错误。
事实证明,如果我们删除一个自定义 TFS 构建活动来操作程序集信息代码文件,Silverlight 应用程序将按预期工作。奇怪的是,重新启用该活动后,编译的 XAP 应用程序仍然可以工作(已针对在单独分支上工作的两个不同构建定义进行了验证)。自定义活动操作程序集属性 AssemblyConfiguration、AssemblyCompany、AssemblyProduct、AssemblyCopyright、AssemblyTrademark、AssemblyVersion 和 AssemblyFileVersion。
一些额外的提示:
- 自定义活动将在任何编译完成之前更改程序集信息文件
- 使用 Visual Studio 编译操纵的源代码将构建一个工作 XAP
- XAP 文件的内容(工作和不工作)相同(大小几乎相同,清单文件没有差异)
- 使用
ResourceManager("Resource", Assembly.GetExecutingAssembly())实例化资源管理器
我的问题是:
- 为什么 Silverlight 会尝试从
/ClientBin/de/获取这些附属程序集,而不是仅使用 XAP 文件中的那些? - 程序集信息文件中的哪种属性会导致这种行为?
- 为什么重新启用版本控制活动不会再次破坏 XAP?
【问题讨论】:
标签: silverlight deployment tfs