2016-05-23 11 views
5

Piszę aplikację w języku C# przy użyciu programu Visual Studio 2015. Ta aplikacja jest przeznaczona dla "dowolnego procesora" (bez włączonej opcji "Preferuj 32-bitowe"), co oznacza, że ​​aplikacja kompiluje się do pojedynczego obiektu kompilacji, który będzie działać w 32-bitowej wersji. w 32-bitowych systemach operacyjnych i trybie 64-bitowym w 64-bitowych systemach operacyjnych.Jak skopiować plik w Visual Studio w zależności od architektury systemu operacyjnego programisty?

Ta aplikacja wymaga skopiowania pewnej natywnej biblioteki DLL do folderu wyjściowego (tj. Folderu bin/Debug lub bin/Release). Istnieją oddzielne wersje tej biblioteki DLL w wersji x86 i x64, a prawidłowa wersja musi zostać skopiowana do folderu wyjściowego w zależności od systemu operacyjnego programisty.

Jak dotąd zorientowali się, że może kopiowania plików do folderu wyjściowego warunkowo dodając coś jak następuje do mojego pliku .csproj:

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

Więc moje pytanie brzmi, jak mogę napisz warunek równoważny "systemowi operacyjnemu programisty to x86" lub "... x64"?

(Aby być super jasnym, jestem nie pytam, jak skopiować plik warunkowo po celu zbudowania platformy, co w moim przypadku jest zawsze "Dowolnym procesorem".) Pytam, jak skopiować plik warunkowo w zależności od architektury systemu operacyjnego, na którym działa program Visual Studio.)

+0

Właściwie po prostu zrobię to w przypadku budowania postu. –

+0

@ AllanS.Hansen Tak, to był mój pierwszy instynkt (już korzystam z post-build, aby skopiować kilka innych plików); Po prostu nie mogłem znaleźć żadnych wskazówek na temat kopiowania plików * warunkowo * w zdarzeniach pokompilacyjnych, nieważne, zależnie od architektury systemu operacyjnego. Jeśli ktokolwiek może mi powiedzieć, jak to zrobić w przypadku post-buildu, będzie to w 100% akceptowalne! –

+0

Spójrz na to: http://stackoverflow.com/questions/3832552/conditionally-use-32-64-bit-reference-when-building-in-visual-studio – Alex

Odpowiedz

1

Dzięki kilku pomocnym komentarzom do pierwotnego pytania powyżej, które wskazały mi właściwy kierunek, odkryłem, jak rozwiązać ten problem:

Zdecydowałem się skopiować plik w zdarzeniu post-build i użyłem komend skryptu wsadowego do sprawdzenia zmiennych środowiskowych PROCESSOR_ARCHITECTURE i PROCESSOR_ARCHITEW6432. (. Więcej informacji na temat tych zmiennych here)

Oto przykład jak to zrobić w post-build zdarzeń:

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)" 
) 

Przypuszczalnie mogę również korzystać z tych zmiennych środowiskowych w pliku .csproj jak ja Myślałem o zrobieniu w pierwotnym pytaniu, ale zrobienie tego w post-buildowym wydaniu wydawało mi się nieco łatwiejsze i bardziej przejrzyste, a ja już używałem post-build do kopiowania innych plików.

Powiązane problemy