.NETリソースマネージャを使用してSilverlightアプリケーションをローカライズし、ドイツ語( "de")のサテライトアセンブリをXAPファイルに埋め込みたいとします。そのため、中立言語を "en"に設定し、csprojファイルでサポートされている言語のリストに "de"を追加しました。これは、プロジェクトをローカルに構築するときに問題なく動作します。 MSBuild(TFS)を使用してSilverlightソリューションを構築すると、XAPに埋め込まれたファイル(存在するもの)を取得する代わりに、Silverlightは/ClientBin/de/*.dll
のHTTP要求を使用して衛星アセンブリを取得しようとします。 Webサーバーが存在しないファイルの404エラーコードを返すため、Silverlightは初期化エラーでクラッシュします。Silverlightがリソースアセンブリをフェッチできません
アセンブリ情報コードファイルを操作するカスタムTFSビルドアクティビティを削除すると、Silverlightアプリケーションが期待通りに機能することが判明しました。不思議なことに、アクティビティを再び有効にした後も、コンパイルされたXAPアプリケーションは引き続き動作します(別々のブランチで動作する2つの異なるビルド定義で検証済み)。カスタムアクティビティは、アセンブリ属性,AssemblyCompany
,AssemblyProduct
,AssemblyCopyright
,AssemblyTrademark
,AssemblyVersion
およびAssemblyFileVersion
を操作します。
いくつかの追加のヒント:任意のコンパイルが働いXAPに
- カスタムアクティビティは、アセンブリ情報ファイルを変更します(動作していても機能していない)XAPファイルのサイズは同じです(ほぼ同じサイズ、マニフェストファイルの違いはありません)
- リソースマネージャは
ResourceManager("Resource", Assembly.GetExecutingAssembly())
私の質問は以下のとおりです。
- なぜシルバーだけではなく、XAPファイルのものを使用しての
/ClientBin/de/
からこれらのサテライトアセンブリを取得しようとしていますか? - アセンブリ情報ファイルのどのような属性がこのような動作を引き起こす可能性がありますか?
- バージョン管理アクティビティを再度有効にしても、XAPが再び破損しないのはなぜですか?
良いキャッチ、ありがとう;) – tomasK