จะอัพเกรด msbuild เป็น C # 6 ได้อย่างไร?


106

ฉันต้องการใช้ C # 6 ในโปรเจ็กต์ของฉัน (การขยายสัญญาณว่างคุณสมบัติอื่น ๆ )

ฉันได้ติดตั้ง VS 2015 บนพีซีของฉันแล้วและมันทำงานได้ยอดเยี่ยมและสร้างรหัสทดสอบเช่น

var user = new SingleUserModel(); //all model fields are null
var test = user.User?.Avatar?["blah"];

แต่เมื่อผมได้ผลักดันโครงการของฉันที่จะซื้อคืนและ CI ?เริ่มที่จะสร้างมันสร้างล้มเหลวเนื่องจากการได้รับการสนับสนุน

ฉันได้ติดตั้ง VS2015 บนเซิร์ฟเวอร์ CI แล้ว แต่ก็เหมือนจะไม่ได้ใช้งาน ฉันจะทำอะไรได้บ้าง?

CI - CruiseControl .NET สร้างด้วย C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe


3
สำหรับทุกคนที่ดาวน์โหลด MS Build Tools 2015 จากลิงค์ที่ระบุด้านล่างพวกเขาเป็นรุ่นเก่า (ก่อนอัปเดต) ที่มีข้อบกพร่อง ... ฉันพบลิงก์ที่นี่ถึง 2015 Update 3
bdrajer

คำตอบ:


164

อย่าลืมโทร:

C:\Program Files (x86)\MSBuild\14.0\Bin\MsBuild.exe

นั่นคือเวอร์ชันของ MsBuild ที่มาพร้อมกับ Visual Studio 2015 และเรียกคอมไพเลอร์ C # ที่เข้าใจสิ่งนี้ คุณจะได้รับรุ่นนี้ MSBUILD ในระบบของคุณโดยการติดตั้งฉบับ Visual Studio 2015 หรือโดยการติดตั้งแบบสแตนด์อะโลนไมโครซอฟท์สร้างเครื่องมือ 2015

การเพิ่มการอ้างอิงไปยังแพ็คเกจ NuGet ต่อไปนี้จะบังคับใช้คอมไพเลอร์ใหม่ด้วย:

Install-Package Microsoft.Net.Compilers

โปรดทราบว่า Install-Package จะเลือกเวอร์ชันล่าสุดที่มีให้ซึ่งอาจไม่ใช่เวอร์ชันที่คุณกำลังมองหา ก่อนที่คุณจะติดตั้งโปรดตรวจสอบบันทึกประจำรุ่นและการอ้างอิงเพื่อแก้ไขปัญหาพื้นฐานเกี่ยวกับเวอร์ชันที่จัดการซึ่งในกรณีนี้มีความเฉพาะเจาะจงมากขึ้นสำหรับ VS 2015

ดังนั้นสำหรับ Visual Studio 2015:

Install-Package Microsoft.Net.Compilers -Version 1.0.0

2
มีความกังวลใด ๆ เกี่ยวกับสิ่งนี้ที่ทำให้เกิดข้อบกพร่องตั้งแต่ RyuJIT หรืออะไรก็ตามที่มีข้อบกพร่องมากมาย?
Maslow

3
หมายเหตุเกี่ยวกับเรื่องนี้หากคุณกำลังอัปเดตตัวแปร PATH env โปรดลบตำแหน่งเดิมออก (เช่น C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319) เนื่องจากอาจยังคงเรียกสิ่งนั้นเมื่อดำเนินการ "msbuild "from cmd
TheWebGuy

2
ฉันต้องติดตั้งแพคเกจ nuget Microsoft.Net.Compilers: ดูstackoverflow.com/a/36774876/584714
DrGriff

2
มีวิธีแก้ปัญหานี้โดยไม่ต้องติดตั้งแพ็คเกจ nuget ในทุกโครงการหรือไม่? ฉันมี 100 โครงการที่ต้องการสิ่งนี้และดูเหมือนว่าไม่จำเป็นสำหรับฉัน ดูเหมือนว่ามีข้อบกพร่องอยู่ที่ไหนสักแห่ง
Cole W

2
มีใครมีคำตอบสำหรับคำถาม @ColeW หรือไม่?
Zinov

61

คุณสามารถติดตั้ง "Microsoft Build Tools 2015" แทน VS2015 บนเซิร์ฟเวอร์บิลด์ของคุณได้

https://www.microsoft.com/en-us/download/details.aspx?id=48159

ติดตั้ง MSBuild ไปยังเส้นทางเดียวกัน:

C:\Program Files (x86)\MSBuild\14.0\Bin\MsBuild.exe

IMHO มีสาเหตุทำไมคำถามจึงเกี่ยวข้องกับสภาพแวดล้อมนั้น แสดงความคิดเห็นต่อคำถามดีกว่า
jogo

24
เนื่องจาก stackoverflow ไม่อนุญาตให้ฉันแสดงความคิดเห็นเกี่ยวกับคำถามฉันจึงโพสต์วิธีเดียวที่ระบบอนุญาต และหากคุณไม่พบว่ามีประโยชน์ก็จงเพิกเฉย สำหรับฉันในขณะที่ค้นหาโซลูชันบนเซิร์ฟเวอร์ที่สร้างของฉันนี่เป็นวิธีที่จะไปแทนที่จะติดตั้ง VS2015
MuhKuh

เมื่อคุณติดตั้ง "Microsoft Build Tools 2015" (หรือ "Microsoft Build Tools 2017") แล้วคุณยังสามารถควบคุมเวอร์ชันของ Visual Studio ที่คุณต้องการใช้เพื่อสร้างโซลูชัน: MSBuild.exe / t: Build YourSolution.sln / p : VisualStudioVersion = 14.0 [ตั้งค่าเป็น 10.0 สำหรับ VS2010 ถึง 14.0 สำหรับ VS2015 และ 15.0 สำหรับ VS2017]
Alex Sanséau

หากต้องการดาวน์โหลดและติดตั้งMicrosoft Build Tools 2015 Update 3โปรดไปที่การดาวน์โหลด VS รุ่นเก่าและไปที่Redistributables and Build Toolsส่วน
RBT

12

คุณอาจทำงานนี้อยู่แล้ว แต่อาจช่วยคนอื่นได้ในอนาคต เมื่อไม่นานมานี้ฉันเจอคำถามนี้และทำให้ฉันก้าวไปในทิศทางที่ถูกต้องและนำไปสู่แนวทางแก้ไขในที่สุด

อีกวิธีหนึ่งที่เป็นไปได้คือการอัปเดตไฟล์โครงการของคุณด้วยตนเองเพื่อกำหนดเป้าหมายเวอร์ชัน MSBuild ที่คุณต้องการให้สร้างโครงการด้วย

ฉันเพิ่งผ่านการอัปเดตเซิร์ฟเวอร์ TeamCity build และฉันได้ติดตั้ง Microsoft Build Tools 2015 ไว้แล้ว ฉันคิดว่าฉันมีทุกอย่างในบิลด์เซิร์ฟเวอร์ฉันมีโซลูชันที่กำหนดเป้าหมาย C # 6.0 และฉันมีทุกโปรเจ็กต์ที่กำหนดเป้าหมาย. net 4.6.1 เช่นเดียวกับคุณทุกอย่างที่มีโค้ดเฉพาะ C # 6.0 สร้างขึ้นได้ดีในสภาพแวดล้อมท้องถิ่นของฉัน แต่เซิร์ฟเวอร์สร้าง TeamCity ของฉันไม่ชอบสิ่งใดเลย

ดังที่ผู้อื่นกล่าวไว้ฉันได้ลองใช้แพ็คเกจ Microsoft.Net.Compilers NuGet เวอร์ชันล่าสุดอนุญาตให้บิวด์ทำงานบนเซิร์ฟเวอร์บิลด์ของฉันได้ แต่จะไม่อนุญาตให้ฉันเผยแพร่โค้ดในเครื่อง (ข้อกำหนดของฉัน) เวอร์ชันก่อนหน้านี้ของแพ็คเกจ NuGet นั้นจะให้ฉันเผยแพร่ แต่บิลด์ใช้ไม่ได้

สิ่งที่ฉันพบว่าต้องทำในท้ายที่สุดคือแก้ไขไฟล์โครงการแต่ละไฟล์ในโซลูชันของฉันเพื่อกำหนดเป้าหมายเฉพาะรุ่น MSBuild ที่สามารถจัดการรหัส C # 6.0 ได้ ในแต่ละไฟล์โครงการของฉันฉันพบบรรทัดที่คล้ายกับบรรทัดต่อไปนี้:

<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

โดยมีองค์ประกอบหลักของบรรทัดนั้นคือส่วนToolsVersionของมัน ฉันเพิ่งเปลี่ยนบรรทัดนี้ในไฟล์โครงการของฉันเพื่ออ่านสิ่งต่อไปนี้:

<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

ความแตกต่างตรงนี้คือฉันกำหนดเป้าหมายเวอร์ชัน 14 ไม่ใช่ 4 เวอร์ชัน 14.0 สอดคล้องกับ Build Tools 2015 จากการเปลี่ยนแปลงนี้เซิร์ฟเวอร์การสร้าง TeamCity ของฉันใช้เวอร์ชัน MSBuild ที่ถูกต้องและสามารถสร้างรหัส C # 6.0 ของฉันได้

ฉันต้องอัปเดตโหนด xml TargetFrameworkVersion ด้วยตนเองเพื่อใช้ 4.6.1 เนื่องจาก VS2015 ไม่ได้ทำสิ่งที่ถูกต้องและทำให้งานสร้างในเครื่องของฉันยุ่ง แต่นั่นไม่เกี่ยวข้องที่นี่

ได้โปรดมีคนแก้ไขฉันถ้าฉันผิด แต่เพื่อการอ้างอิงฉันคิดว่าหมายเลขเวอร์ชันจะเป็นดังนี้:

4.0 = VS2012

12.0 = VS2013

14.0 = VS2015

15.0 = VS2017

ฉันเชื่อว่าหากคุณต้องการใช้. net 4.7 คุณจะต้องติดตั้ง Build Tools 2017 และมีโครงการของคุณที่กำหนดเป้าหมายเป็น 15.0 แทนที่จะเป็น 14.0 แต่ฉันยังไม่ได้ยืนยันสิ่งนี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.