Saya mencoba menggunakan MSBuild untuk membangun solusi dengan platform target yang ditentukan (saya butuh kedua binari, x86 dan x64). Ini adalah bagaimana saya mencobanya:
C:\WINDOWS\Microsoft.NET\Framework\v3.5>MsBuild SolutionPath\Solution.sln /t:Rebuild /p:Configuration=Release /p:Platform="x86"
Namun build selalu gagal jika platform berbeda dari "Any CPU". Apa yang saya lakukan salah?
Ini adalah output sementara yang dicetak oleh MSBuild:
C: \ WINDOWS \ Microsoft.NET \ Framework \ v3.5> MsBuild SolutionPath \ Solution.sln / t: Rebuild / p: Konfigurasi = Rilis / p: Platform = "x86" Microsoft (R) Build Engine Versi 3.5.30729.1 [ Microsoft .NET Framework, Versi 2.0.50727.3082] Hak Cipta (C) Microsoft Corporation 2007. Hak cipta dilindungi Undang-Undang.
Membangun mulai 1.7.2010 8:28:10. Proyeksikan "SolutionPath \ Solution.sln" pada node 0 (Rebuild targe t (s)). SolutionPath \ Solution.sln: error MSB4126: Konfigurasi khusus yang ditentukan "Release | x86" tidak valid. Silakan tentukan solusi valid c onfigurasi menggunakan properti Konfigurasi dan Platform (mis. Solusi MSBuild.exe.sln / p: Konfigurasi = Debug / p: Platform = "CPU Apa Pun") atau biarkan rie prope kosong untuk menggunakan konfigurasi solusi default. Proyek Pembangunan Selesai "SolutionPath \ Solution.sln" (Bangun kembali) - GAGAL.
Bangun GAGAL.
"SolutionPath \ Solution.sln" (target Rebuild) (1) -> (Target ValidateSolutionConfiguration) -> SolutionPath \ Solution.sln: kesalahan MSB4126: Konfigurasi olution yang ditentukan "Rilis | x86" tidak valid. Silakan tentukan konfigurasi solusi yang valid menggunakan properti Konfigurasi dan Platform (mis. MSBuild.ex e Solution.sln / p: Configuration = Debug / p: Platform = "Any CPU") atau biarkan proyek-proyek tersebut kosong untuk menggunakan konfigurasi solusi default.
0 Warning(s) 1 Error(s)
Waktu Berlalu 00: 00: 00.03
Jika saya mencoba membangunnya untuk x86 / x64 dengan devenv berfungsi dengan baik, namun saya mencoba membuat server build tanpa menginstal semua versi Visual Studio yang diperlukan. Omong-omong, jika ada alat gratis yang lebih baik (yang mendukung .NET framework 4) di luar sana, saya ingin sekali mendengarnya.
Win32
sementara moden .NET menggunakanx86
Jawaban:
Jika Anda ingin membangun solusi untuk x86 dan x64 , solusi Anda harus dikonfigurasikan untuk kedua platform. Sebenarnya Anda hanya memiliki konfigurasi CPU apa saja .
Cara memeriksa konfigurasi yang tersedia untuk suatu proyek
Untuk memeriksa konfigurasi yang tersedia untuk proyek yang diberikan, buka file proyek (
*.csproj
misalnya) dan cariPropertyGroup
dengan hakCondition
.Jika Anda ingin membangun dalam
Release
mode untukx86
, Anda harus memiliki sesuatu seperti ini di file proyek Anda:Cara membuat dan mengedit konfigurasi di Visual Studio
(sumber: microsoft.com )
(sumber: msdn.com )
(sumber: msdn.com )
Cara membuat dan mengedit konfigurasi (di MSDN)
sumber
Win32
alih-alihx86
misalnya, yangCMake
dihasilkan lakukan (libssh2
menggunakanCMake
).Di MSBuild atau Teamcity gunakan baris perintah
atau gunakan formulir yang lebih pendek:
Namun Anda perlu mengatur platform di proyek Anda, lihat jawabannya oleh Julien Hoarau.
sumber
Platform="Any CPU"
atauPlatform="Mixed Platforms"
bagi mereka yang membutuhkannya.Jika Anda mencoba melakukan ini dari baris perintah, Anda mungkin menghadapi masalah di mana 'Platform' variabel lingkungan mesin sedang diatur untuk Anda dan bekerja melawan Anda. Saya dapat mereproduksi ini jika saya menggunakan jendela Command VS2012 daripada jendela Command windows biasa.
Pada prompt perintah ketik:
Di jendela Command VS2012, saya memiliki nilai preset 'X64'. Itu tampaknya mengganggu apa pun yang ada di file solusi saya.
Di jendela Command biasa, perintah 'set' menghasilkan pesan "variable not defined" ... yang bagus.
Jika hasil dari perintah 'set' Anda di atas tidak mengembalikan nilai variabel lingkungan, Anda sebaiknya melanjutkan.
sumber
Untuk VS2017 dan 2019 ... dengan file proyek SDK core library modern , platform dapat diubah selama proses pembangunan. Berikut adalah contoh untuk berubah ke
anycpu
platform, tepat sebelumCoreCompile
tugas bawaan berjalan:Dalam kasus saya, saya sedang membangun FPGA dengan
BeforeTargets
danAfterTargets
tugas, tetapi menyusun aplikasi C # di utamaCoreCompile
. (sebagian karena saya mungkin menginginkan semacam aplikasi command-line, dan sebagian karena saya tidak tahu cara menghilangkan atau menimpanyaCoreCompile
)Untuk membangun beberapa biner bersamaan, seperti x86 dan x64: diperlukan tugas pembuatan manual yang terpisah atau dua file proyek terpisah dengan masing-masing
<PlatformTarget>x86</PlatformTarget>
dan<PlatformTarget>x64</PlatformTarget>
pengaturan pada contoh di atas.sumber