ฉันมีโครงการ C# ที่ค่อนข้างตรงไปตรงมาสองโครงการ: โปรแกรมที่สามารถสร้างเป็น x86 หรือ AnyCPU ซึ่งอ้างอิง (ผ่าน <ProjectReference>
) โครงการ DLL ที่มีการกำหนดค่า AnyCPU เท่านั้น ทั้งหมดนี้ทำงานได้ตามที่คาดไว้ภายใน Visual Studio
ฉันกำลังพยายามสร้างเวอร์ชัน x86 ของโปรเจ็กต์ปฏิบัติการ (และการขึ้นต่อกัน) จากบรรทัดคำสั่งด้วย /p:Platform="x86"
ซึ่งทำให้การสร้างโครงการ DLL ล้มเหลว (ในขณะที่ /p:Platform="AnyCPU"
ใช้งานได้ อาจเป็นเพราะใช้ได้กับทั้งสองโครงการ)
บรรทัดคำสั่งทั้งหมดที่ฉันใช้คือ:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild MyProject\MyProject.csproj /t:Build /p:Configuration="Release" /p:Platform="x86"
ตัวเลือกของฉันในการทำให้บิลด์นี้ทำงานจากบรรทัดคำสั่งมีอะไรบ้าง ควรโดยไม่ต้องแก้ไขโครงการ DLL เลย หรือแก้ไขโครงการในลักษณะที่รบกวนการใช้งานตามปกติใน Visual Studio
(เป้าหมายสูงสุดที่นี่คือแบตช์ไฟล์ที่สามารถสร้างเวอร์ชันใหม่ของโปรเจ็กต์เพื่อการเผยแพร่)
ข้อมูลเพิ่มเติม:
ทั้งสองโครงการมีการกำหนดค่า "Debug" และ "Release" โครงการที่ปฏิบัติการได้มี "x86" และ "AnyCPU" ภายใต้แพลตฟอร์ม โครงการ DLL มีเพียง "AnyCPU" ที่พร้อมใช้งานภายใต้แพลตฟอร์ม ตัวเลือก "เป้าหมายแพลตฟอร์ม" ตรงกับ "แพลตฟอร์ม" ในทุกกรณี (ไม่มีตัวเลือก "ชอบ 32 บิต" เนื่องจากฉันใช้ VS2010)
ดูเหมือนว่าข้อผิดพลาดจะเป็นข้อผิดพลาดที่เกี่ยวข้องกับการคอมไพล์ ("ไม่อนุญาตให้ใช้รหัสที่ไม่ปลอดภัย") ใน DLL ซึ่ง - แม้ว่าฉันจะไม่แน่ใจ 100% - ดูเหมือนว่าจะเป็นเพราะไม่มีองค์ประกอบ <PropertyGroup>
ในโครงการ DLL ใดที่ตรงกัน (เนื่องจาก Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "
ฯลฯ) ที่จะระบุพารามิเตอร์ที่จำเป็นสำหรับการคอมไพล์ (เช่น AllowUnsafeBlocks
และ DefineConstants
)
<PlatformTarget>
ในไฟล์โปรเจ็กต์) ตรงกับแพลตฟอร์มที่ระบุโดย$(Platform)
(เช่น: แพลตฟอร์มใดก็ตามที่เลือกไว้สำหรับบิลด์) ในลักษณะปกติที่คุณคาดหวังสำหรับไฟล์โปรเจ็กต์ เช่น:<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
Visual Studio จะสร้างชุด x86 EXE + AnyCPU DLL ได้ดี ฉันจะทำสิ่งนี้จากบรรทัดคำสั่งได้อย่างไร มีวัตถุประสงค์เพื่อสร้าง EXE ในการกำหนดค่าทั้งสอง - person Andrew Russell   schedule 06.10.2017<ProjectReference>
ทำหรือไม่ (มันจะง่ายพอที่จะสร้าง DLL แยกกัน) ฉันไม่แน่ใจว่ามันใช้งานได้จริงแค่ไหน แต่เห็นได้ชัดว่า VS ใช้งานได้ (แพลตฟอร์ม x86 โซลูชัน ใช้แพลตฟอร์ม AnyCPU DLL โครงการ) - person Andrew Russell   schedule 06.10.2017$(Configuration)|$(Platform)
ที่คุณส่งผ่านและให้การตั้งค่าที่ถูกต้อง ซึ่งดูเหมือนเป็นวิธีแก้ปัญหามากกว่า (ก็ค่อนข้างเจ็บปวดเช่นกัน เนื่องจากฉันพยายามหลีกเลี่ยงการแก้ไขไฟล์โครงการของ DLL) ฉันเดาว่านี่เป็นคำถาม<ProjectReference>
ทำงานอย่างไรมากกว่าคำถามที่ทำให้ข้อผิดพลาดหายไป - person Andrew Russell   schedule 06.10.2017