2010-12-28 2 views
0

私がテストしているDLLは、AssemblyCultureの無効な値であると思われるDLLにリンクしています。値は "Neutral"(大文字の "N"に注意)ですが、私がテストしているDLLとプロジェクトの他のすべてのDLLは "中立"の値を持っています(AssemblyCulture("")を指定しているため)。VSTSテストのデプロイメントと無効なアセンブリカルチャ

私は、問題のDLLへリンクが、私はVSTSにこのエラーが出るというDLLを展開しよう:

Failed to queue test run '...': Culture is not supported. 
Parameter name: name 
Neutral is an invalid culture identifier. 

<Exception>System.Globalization.CultureNotFoundException: Culture is not supported. Parameter name: name 
Neutral is an invalid culture identifier. 
    at System.Globalization.CultureInfo..ctor(String name, Boolean useUserOverride) 
    at System.Globalization.CultureInfo..ctor(String name) 
    at System.Reflection.RuntimeAssembly.GetReferencedAssemblies(RuntimeAssembly assembly) 
    at System.Reflection.RuntimeAssembly.GetReferencedAssemblies() 
    at Microsoft.VisualStudio.TestTools.Utility.AssemblyLoadWorker.ProcessChildren(Assembly assembly) 
    at Microsoft.VisualStudio.TestTools.Utility.AssemblyLoadWorker.GetDependentAssemblies(String path) 
    at Microsoft.VisualStudio.TestTools.Utility.AssemblyLoadWorker.GetDependentAssemblies(String path) 
    at Microsoft.VisualStudio.TestTools.Utility.AssemblyLoadStrategy.GetDependentAssemblies(String path) 
    at Microsoft.VisualStudio.TestTools.Utility.AssemblyHelper.GetDependentAssemblies(String path, DependentAssemblyOptions options, String configFile) 
    at Microsoft.VisualStudio.TestTools.TestManagement.DeploymentManager.GetDependencies(String master, String configFile, TestRunConfiguration runConfig, DeploymentItemOrigin dependencyOrigin, List`1 dependencyDeploymentItems, Dictionary`2 missingDependentAssemblies) 
    at Microsoft.VisualStudio.TestTools.TestManagement.DeploymentManager.DoDeployment(TestRun run, FileCopyService fileCopyService) 
    at Microsoft.VisualStudio.TestTools.TestManagement.ControllerProxy.SetupTestRun(TestRun run, Boolean isNewTestRun, FileCopyService fileCopyService, DeploymentManager deploymentManager) 
    at Microsoft.VisualStudio.TestTools.TestManagement.ControllerProxy.SetupRunAndListener(TestRun run, FileCopyService fileCopyService, DeploymentManager deploymentManager) 
    at Microsoft.VisualStudio.TestTools.TestManagement.ControllerProxy.QueueTestRunWorker(Object state)</Exception> 

私はVSTSラッパーテストでDLL(にリンクしていない場合でも、 、またはNUnitテストで)、私はGenericTestファイル(私はNUnitテストをラッピングしています)に追加するとすぐに、その例外が発生します。

問題の原因はDLLではなく、コードにも署名があるため、再コンパイルでは解決できません。

DLL DeploymentItemの依存関係の展開をスキップして、カルチャチェックを修正または無効にする方法、または複雑な方法で(おそらく何らかの形でアセンブリを埋め込む)この問題を回避する方法はありますか?文化の価値を無効にする方法はありますか?DLLをハッキングしないようにしてください(コード署名を削除してハックが機能するようにする)?外部マニフェストを使用している可能性がありますか?

プロダクションコードが奇妙に変わることなく、適切な解決策が必要です。たとえば、ハッキングされたDLLを展開することはできません。また、コードカバレッジのためにDLLをインスツルメントする必要があります。

その他の注意:テスト中のDLLをコンパイルするときに、問題のDLLにリンクするリンカーの警告が表示されますが、これはVSTS以外に何も破損せず、複数のバージョンが出荷されています。

答えて

0

私は計装(NUnit VSの統合に悩まされている私の主張でした)を行うと、これらの問題を避けることができました。設定のないことを確認され、正確な組み合わせトリックをしましたが、これらは私が使用しています設定です:インプレース

  • 計装
  • をMSTestをテストプロジェクトのみNUnitのテストプロジェクトの依存
  • ありジェネリックテストでは、NUnitテスト(MSTest bin出力フォルダから)、NUnitテストapp.config(NUnitテストビン出力フォルダから)、および問題のDLLをデプロイします。テスト対象のDLLを含む残りの依存関係は、コードカバレッジによって展開されます。

あなたは機器を必要としない場合、私はこの回避策が見つかりました:

  • テストの下で、この場合には(DLLの問題を引き起こしているトップレベルのDLLにリンクしないでください)
  • 、実行時に埋め込みリソース
  • などの問題を引き起こしている依存チェーン内のすべてのDLLをそのプロジェクト
  • 埋め込みのプロジェクトが依存させるために設定するソリューションのビルドを変更し、各DLLのリソースストリームをつかむ、作成fiファイルをコピーしてストリームをコピーします。基本的に、そして、ファイル

Write file from assembly resource stream to disk

として再資源や出力、それらを抽出し、そこにはリンク時の依存関係がないので、MSTestを、それらのDLLは表示されません。 DLLは実行時にのみ表示され、MSTestはデプロイメント時に計測を行いたいので、計測器では​​うまく動作しません。実際にそれらのDLLにリンクしなければならない場合は、うまくいきません:)私の場合は、問題のない抽象インターフェースから派生しています。

0

私はこれに代わるものに感謝したいと思いますが、私にとってはうまくいくソリューションが見つかりました。

  • 代わりコード署名を除去するために構築されたDLL
  • ハック問題のDLLを参照すると、ユニットテストDLLにテスト対象プロジェクトのコードをコンパイルし、そして「ニュートラル」から「ニュートラル」に変更(手動で変更バイナリ)
  • 問題のDLLをユニットテストプロジェクトディレクトリにチェックインします。このDLLのユニットテストプロジェクトの代わりに、元の問題DLL

これは、生産コードへの変更を伴うが、重複した努力をしていません

  • リンクを製品版を上書きしないでください。テスト中のプロジェクトからソースファイルを追加/削除するには、ユニットテストプロジェクトを変更し、それらのファイルへのリンクを追加/削除する必要があります。ただし、ソースファイルを複製する代わりにリンクを使用するため、コードを複製することはありません。

    編集:このいくつかのバリエーションがある時点で私のために働いたが、私は完全にそれが今、働いていた方法として失われています。このソリューションで問題があるのは、混合モードアセンブリがあるため、適切なハックを実行できないためです。カルチャ設定を削除します。明示的に設定された「ニュートラル」の値は、一部の場所でのみ機能します。

    最終的な回避策については、私の他の答えを見てください。彼らはすべての場合にうまくいくはずですが、彼らも複雑です。

  • 関連する問題