2016-05-23 17 views
5

Visual Studio 2015 kullanarak bir C# uygulaması yazıyorum. Bu uygulama, "Herhangi bir CPU" ("Prefer 32-bit" seçeneği olmadan) seçeneğini hedefler; bu, uygulamanın 32-bit'te çalışacak tek bir oluşturma hedefini derlediğini gösterir. 32 bit işletim sistemlerinde ve 64 bit işletim sistemlerinde 64 bit modda.Visual Studio'daki bir dosya, geliştiricinin işletim sistemi mimarisine bağlı olarak nasıl kopyalanır?

Bu uygulama, belirli bir yerel DLL'nin çıkış klasörüne (yani, bin/Hata ayıklama veya bin/Sürüm klasörü) kopyalanmasını gerektirir. Bu DLL'nin ayrı x86 ve x64 sürümleri vardır ve doğru olanı, geliştiricinin işletim sistemine bağlı olarak çıktı klasörüne kopyalanması gerekir.

Şimdiye kadar ben koşullu benim .Csproj dosyasına aşağıdaki gibi bir şey ekleyerek çıkış klasörüne dosyaları kopyala ki anladım: nasıl

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

I do "geliştiricinin işletim sistemi x86" veya "... x64" ile eşdeğer bir koşul yazabilir mi?

(. Ben nasıl koşullu bir dosyayı kopyalamak için soruyorum, benbenim durumumda "Herhangi bir CPU" daima platformu yapı hedef üzerine şartlı bir dosyayı kopyalamak için nasıl soran değilim süper Açık olmak gerekirse Visual Studio'nun çalıştığı OS mimarisine bağlı olarak.)

+0

Doğru bir şekilde bir yayın oluşturma olayında yaparım. –

+0

@ AllanS.Hansen Evet, bu benim ilk içgüdümdü (zaten bir sürü başka dosyayı kopyalamak için post-build kullanıyorum); Post-build olaylarında * koşullu * dosyaları kopyalama konusunda hiçbir ipucu bulamadım, OS mimarisine bağlı olarak nevermind. Birisi bana bir post-inşa olayında bunu nasıl yapılacağını söylerse, bu% 100 kabul edilebilir olurdu! –

+0

Şuna bir bakın: http://stackoverflow.com/questions/3832552/conditionally-use-32-64-bit-reference-when-building-in-visual-studio – Alex

cevap

1

Bana doğru yönde işaret eden asıl soruya yapılan bir çift yararlı yorum sayesinde, bunu nasıl çözeceğimi anladım:

Dosyayı bir post-derleme olayına kopyalamaya karar verdim ve PROCESSOR_ARCHITECTURE ve PROCESSOR_ARCHITEW6432 ortam değişkenlerini kontrol etmek için toplu komut komutlarını kullandı.

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

Muhtemelen ben de ben gibi .Csproj dosyasında bu ortam değişkenleri kullanabilirsiniz: (. Bu değişkenler üzerinde diğer bilgiler here) İşte

sonrası inşa olaylarda bunun nasıl bir örnek orijinal soruda yapmayı düşündüm, ancak post-build olayında bunu yapmak benim için biraz daha kolay ve anlaşılır görünüyordu, ve zaten başka dosyaları kopyalamak için post-build kullanıyordum.

İlgili konular