2

私のコードはサードパーティのライブラリ(dll)に依存しています。

Nuggetは異なるプラットフォームここでも)を管理できないため、同じコードを複製して2つのプロジェクトを作成しました(コードを最小限に抑えました-基本的にAPIラッパー)。

1つのプロジェクトはdllのx86バージョンを参照し、もう1つのプロジェクトはx64を参照します。

私のソリューションには、これらのプロジェクトを参照するプロジェクトが1つだけあります。
両方を参照し、条件付きで参照します(したがって、x64構成でビルドすると、x64 dllを参照するプロジェクトが参照されます)。

その.csprojには次のようなものが含まれています。

ProjectReference Include="..\3rdPartyModule.x86\3rdPartyModule.x86.csproj" Condition="'$(Platform)' == 'x86'"

ProjectReference Include="..\3rdPartyModule.x64\3rdPartyModule.x64.csproj" Condition="'$(Platform)' == 'x64'"

今、奇妙なことが起こります:

両方のプロジェクトをアンロードしてから、最初にx86プロジェクトをロードし、次にx64プロジェクトをロードすると、x64プロジェクトの参照は、実際にはx86 dllを指していることを示しています(パスを確認できます)。

ロードの順序を変更すると、その逆になります。x64は問題ありませんが、x86はx64バージョンを参照しています。

私の推測では、VSはすでにメモリ内に同じ名前のアセンブリを見つけ、2番目から1番目を自動的に参照します。

これは既知の問題ですか?それを回避する方法はありますか?

4

1 に答える 1

1

VS2010 には以前、VS UI で参照が正しく表示されず、コンパイル中に正しいファイルがコピーされるというバグがありました。あなたの場合、ビルド出力ディレクトリで正しいバージョンのファイルを取得していますか?

また、(参照プロパティから) 参照されるアセンブリに別のエイリアスを設定することもできます。それは役立つかもしれません。

于 2012-10-18T13:10:04.037 に答える