2016-05-23 8 views
5

私はVisual Studio 2015を使用してC#アプリケーションを作成しています。このアプリケーションは32ビットで実行される単一のビルドターゲットにアプリケーションをコンパイルすることを意味する "Any CPU"( "32ビット優先設定" 32ビット・オペレーティング・システムでは64ビット・モード、64ビット・オペレーティング・システムでは64ビット・モードです。Visual Studioのファイルを開発者のオペレーティングシステムのアーキテクチャに基づいて条件付きでコピーするにはどうすればよいですか?

このアプリケーションでは、特定のネイティブDLLを出力フォルダ(bin/Debugまたはbin/Releaseフォルダ)にコピーする必要があります。このDLLには別のx86およびx64バージョンがあり、開発者のオペレーティングシステムに応じて正しいフォルダを出力フォルダにコピーする必要があります。

これまでのところ、私は私の.csprojファイルに次のようなものを追加することにより、条件付きで出力フォルダにI できコピーファイルことを考え出した:だから私の質問は、私はどのように、ある

<ItemGroup Condition="MY CONDITION HERE"> 
    <Content Include="MyNativeLib.dll"> 
     <CopyToOutputDirectory>Always</CopyToOutputDirectory> 
    </Content> 
</ItemGroup> 

「開発者のオペレーティングシステムはx86」または「... x64」に相当する条件を記述しますか?

(私はではありません。プラットフォームビルドターゲットに条件付きでファイルをコピーする方法を質問しています。私の場合は常に「任意のCPU」です。条件付きでファイルをコピーする方法を尋ねていますVisual Studioが実行されているOSアーキテクチャに応じて)。

+0

ポストビルドイベントで正しく実行します。 –

+0

@ AllanS.Hansenそれは私の最初の本能でした(私はすでにポストビルドを使って他のファイルをコピーしています)。条件付きでファイルをコピーすることについてのヒントを見つけることができなかった*ビルド後のイベントでは、OSアーキテクチャーには条件がありません。ビルド後のイベントで誰かにこのことをどうやって伝えることができれば、それは100%受け入れられるでしょう! –

+0

これを見てください:http://stackoverflow.com/questions/3832552/conditionally-use-32-64-bit-reference-when-building-in-visual-studio – Alex

答えて

1

私は正しい方向で私を指摘した元の質問にいくつかの有用なコメントをいただきましたので、私はこれを解決する方法を考え出しました:

ビルド後のイベントでファイルをコピーし、バッチスクリプトコマンドを使用してPROCESSOR_ARCHITECTUREPROCESSOR_ARCHITEW6432の環境変数を確認することにしました。

set isX64=FALSE 
if "%PROCESSOR_ARCHITECTURE%"=="AMD64" set isX64=TRUE 
if "%PROCESSOR_ARCHITEW6432%"=="AMD64" set isX64=TRUE 
if "%isX64%"=="TRUE" (
    echo "Copying x64 dependencies..." 
    copy "$(ProjectDir)Dependencies\x64\MyNativeLib.dll" "$(TargetDir)" 
) ELSE (
    echo "Copying x86 dependencies..." 
    copy "$(ProjectDir)Dependencies\x86\MyNativeLib.dll" "$(TargetDir)" 
) 

はおそらく、私も私として.csprojファイルでこれらの環境変数を使用することができます(これらの変数に関する詳細情報here)ここで

は、ビルド後のイベントでこれを行う方法の一例です元の質問でやってみることを考えましたが、ポストビルドのイベントでそれをやっているのがやや簡単でわかりました。私はすでにポストビルドを使っていくつかのファイルをコピーしていました。

関連する問題