2016-05-23 88 views
5

我正在編寫一個使用Visual Studio 2015的C#應用​​程序。此應用程序的目標是「任何CPU」(沒有啓用「首選32位」選項),這意味着應用程序將編譯爲將以32位方式運行的單個構建目標模式在64位操作系統上是32位操作系統和64位模式。如何在Visual Studio中以開發人員的操作系統體系結構爲條件複製文件?

此應用程序需要將某個本機DLL複製到其輸出文件夾(即bin/Debug或bin/Release文件夾)。此DLL有單獨的x86和x64版本,根據開發人員的操作系統,正確的版本需要複製到輸出文件夾。

到目前爲止,我想通了,我可以文件複製到輸出文件夾有條件通過添加類似下面的我的.csproj文件:

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

所以我的問題是,我該怎麼辦寫一個等同於「開發人員的操作系統是x86」或「... x64」的條件?

(要超級清晰,我是不是問如何有條件地複製文件在平臺構建目標上,在我的情況下總是「任何CPU」我問如何複製文件有條件地取決於Visual Studio正在運行的操作系統體系結構。)

+0

我會恰當地在發佈後事件中做到這一點。 –

+0

@ AllanS.Hansen是的,這是我的第一個直覺(我已經使用後構建複製一堆其他文件);我根本找不到任何關於在構建後事件中複製文件的條件*,而不是在操作系統架構上有條件。如果有人能夠告訴我如何在後期製作活動中做到這一點,那將是100%可以接受的! –

+0

看看這個:http://stackoverflow.com/questions/3832552/conditionally-use-32-64-bit-reference-when-building-in-visual-studio – Alex

回答

1

感謝上面的原始問題的一些有用的評論,指出我在正確的方向,我已經想出瞭如何解決此問題:

我決定在生成後事件中複製文件,並使用批處理腳本命令檢查PROCESSOR_ARCHITECTUREPROCESSOR_ARCHITEW6432環境變量。 (這些變量的更多信息here

下面是如何做到這一點在後生成事件爲例:

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的文件,這些環境變量,因爲我考慮到在原始問題中做的事情,但是在構建後事件中這樣做似乎對我來說更容易和更清晰,並且我已經使用後期構建來複制其他一些文件。