私は 2 つのプロジェクト .NET 4.5 C# ソリューションを持っています。1 つのプロジェクト (projectA) は、5 つの参照された .dll (非 COM) ファイルを持つクラス ライブラリです。これらのファイルは 32/64 ビット固有であるため、ビルド パスに 2 つの include/ フォルダー (include/x86/ および include/x64/) があり、それぞれにそれぞれの .dll ファイルがあります。.dll の名前は、32 ビット バージョンと 64 ビット バージョンの間でまったく同じです。もう 1 つのプロジェクト (projectB) は、projectA を参照するコンソール アプリです。x64 モードをデバッグ (またはリリースでも構いません) に構成してビルドすると、すべてが機能します。5 つの .dll すべてが bin/x64/ ディレクトリにコピーされ、プログラムは期待どおりに動作します。ただし、構成を x86 モードに切り替えてビルドすると、5 つの .dll のうち 2 つだけが bin/x86/ ディレクトリにコピーされ、プログラムは明らかに機能しません。FileNotFoundException をスローし、アセンブリが「
不足している .dll ファイルを bin/x86/ フォルダーに手動でコピー (またはビルド後のイベントで xcopy を使用) すると、プログラムは動作します。この問題は、ビルド中に Visual Studio (2012 Update 1) がファイルを正しくコピーしていないことに関係しているようです。projectA の 5 つの参照はすべて [コピー: ローカル] に設定されており、Visual Studio の [プロパティ] ボックスのパスは x86 モードと x64 モードの両方で正しいです。projectA を単独で x86-64 モードでビルドすると、5 つの .dll すべてが正しい bin/ フォルダーに正しくコピーされます。したがって、この問題は projectA を参照する projectB にも対処する必要があります。
projectA.csproj ファイルからの抜粋を次に示します。
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<PlatformTarget>x64</PlatformTarget>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<PlatformTarget>x86</PlatformTarget>
</PropertyGroup>
<ItemGroup>
<Reference Include="BaseCommon">
<HintPath>include\$(Platform)\BaseCommon.dll</HintPath>
</Reference>
<Reference Include="BaseDataAccess">
<HintPath>include\$(Platform)\BaseDataAccess.dll</HintPath>
</Reference>
<Reference Include="BaseError">
<HintPath>include\$(Platform)\BaseError.dll</HintPath>
</Reference>
<Reference Include="BaseTof">
<HintPath>include\$(Platform)\BaseTof.dll</HintPath>
</Reference>
<Reference Include="MassSpecDataReader">
<HintPath>include\$(Platform)\MassSpecDataReader.dll</HintPath>
</Reference>
<Reference Include="System" />
問題に関するアイデアはありますか?xcopy コマンドを実行できると思いますが、特に x64 モードで正しく動作する場合は、必要ないようです。
3 台の異なるコンピューターで Windows 8 および Windows 7 64 ビットでテスト済み。