1

x64 で MSTest を使用すると問題が発生しました。テスト プロジェクトはいくつかの C++/CLI アセンブリに依存しており、何らかの理由でロードに失敗します。Visual Studio では、次のようになります (簡略化):

Error loading D:\xxx\Xxx.Test.dll: Unable to load the test container 'D:\xxx\Xxx.Test.dll' or one of its dependencies. Error details: System.BadImageFormatException: Could not load file or assembly 'Common.Geometry.Native, Version=1.1.4574.22395, Culture=neutral, PublicKeyToken=null' or one of its dependencies. An attempt was made to load a program with an incorrect format.

コマンド プロンプトで MSTest を手動で実行すると、次のようになります。

Unable to load the test container 'D:\xxx\Xxx.Test.dll' or one of its dependencies. Error details: System.IO.FileNotFoundException: Could not load file or assembly 'Common.Geometry.Native, Version=1.1.4574.22395, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.

言及する価値のある詳細:

  • テスト プロジェクト自体は、「Any Cpu」を使用してコンパイルされます。
  • x64 固有の testrunco​​nfig を使用します
  • Dependency Walker は、C++/CLI アセンブリ (Common.Geometry.Native) で欠落しているネイティブ依存関係を示しません
  • さらに興味深いことに、同じ C++/CLI アセンブリ (Common.Geometry.Native) を使用する同じソリューションに別のテスト プロジェクトがあり、問題なく実行されます。

また、干渉する 32 ビット アセンブリ/DLL がないことも確認しました。

どんな提案も大歓迎です!

4

1 に答える 1

0

私は当初、マイクロソフトは2012年までMSTest用の64ビット対応のテストランナーを追加しなかったと思っていました...結局のところ、VS2010はこれに対応しています。

次に確認するのは、ネイティブdllに他のネイティブ依存関係があるかどうかです。

MSTestには「誤機能」があり、テストを実行する前に、通常はのような一時ディレクトリを作成し、PC-NAME WORKSPACE_NAME 1782368124\Outコードをそのディレクトリにコピーします。.NETアセンブリの場合、依存関係を把握してコピーすることができますが、ネイティブコードの場合、これを行うようには見えません。

私は過去に、他のネイティブの依存関係を含むディレクトリをユーザーアカウントのPATH環境変数に追加することでこれを解決しました(これを行うと、Visual Studioが気付かないので再起動することに注意してください)

于 2012-09-11T03:36:07.727 に答える