Saya memiliki dua proyek C# yang cukup mudah: Proyek yang dapat dieksekusi yang dapat dibuat sebagai x86 atau AnyCPU, yang mereferensikan (melalui <ProjectReference>
) proyek DLL yang hanya memiliki konfigurasi AnyCPU. Ini semua berfungsi seperti yang diharapkan dalam Visual Studio.
Saya mencoba membangun versi x86 dari proyek yang dapat dieksekusi (dan dependensinya) dari baris perintah, dengan /p:Platform="x86"
. Hal ini menyebabkan pembangunan proyek DLL gagal. (Padahal /p:Platform="AnyCPU"
berfungsi, mungkin karena valid untuk kedua proyek.)
Baris perintah lengkap yang saya gunakan adalah:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild MyProject\MyProject.csproj /t:Build /p:Configuration="Release" /p:Platform="x86"
Apa saja pilihan saya agar build ini berfungsi dari baris perintah? Sebaiknya tanpa memodifikasi proyek DLL sama sekali, atau memodifikasi proyek dengan cara yang mengganggu penggunaannya secara normal di Visual Studio.
(Tujuan utamanya di sini adalah file batch yang dapat membuat versi proyek yang bersih untuk didistribusikan.)
Informasi tambahan:
Kedua proyek memiliki konfigurasi "Debug" dan "Rilis". Proyek yang dapat dieksekusi memiliki "x86" dan "AnyCPU" yang tersedia di Platform. Proyek DLL hanya memiliki "AnyCPU" yang tersedia di Platform. Opsi "Target platform" cocok dengan "Platform" dalam semua kasus. (Tidak ada opsi "Pilih 32-bit", karena saya menggunakan VS2010.)
Kesalahan tersebut tampaknya merupakan kesalahan terkait kompilasi ("tidak ada kode tidak aman yang diizinkan") di DLL, yang -- meskipun saya tidak 100% yakin -- tampaknya terjadi karena tidak ada elemen <PropertyGroup>
dalam proyek DLL yang cocok (karena Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "
dll) yang akan menentukan parameter yang diperlukan untuk kompilasi (misalnya AllowUnsafeBlocks
dan DefineConstants
).
<PlatformTarget>
dalam file proyek) cocok dengan Platform yang ditentukan oleh$(Platform)
(yaitu: platform apa pun yang dipilih untuk pembangunan) dengan cara biasa yang Anda harapkan untuk file proyek, misalnya:<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
. Visual Studio akan membuat kombinasi x86 EXE + AnyCPU DLL dengan baik. Bagaimana saya bisa melakukan ini dari baris perintah? Dimaksudkan untuk dapat membangun EXE di kedua konfigurasi. - person Andrew Russell   schedule 06.10.2017<ProjectReference>
(akan cukup sederhana untuk membuat DLL secara terpisah). Saya tidak yakin seberapa praktis hal itu sebenarnya. Namun VS jelas membuat ini berhasil (platform solusi x86 menggunakan platform proyek AnyCPU DLL). - person Andrew Russell   schedule 06.10.2017$(Configuration)|$(Platform)
kombinasi yang Anda berikan, dan berikan pengaturan yang tepat. Yang sepertinya lebih seperti solusi (juga agak menyakitkan, karena saya mencoba menghindari modifikasi file proyek DLL). Saya kira ini lebih merupakan pertanyaan bagaimana cara kerja<ProjectReference>
daripada pertanyaan menghilangkan kesalahan. - person Andrew Russell   schedule 06.10.2017