Msbuild को C # 6 में अपग्रेड कैसे करें?


106

मैं अपनी परियोजना में सी # 6 का उपयोग करना चाहता हूं (अशक्त प्रचार, अन्य विशेषताएं)।

मैंने अपने पीसी पर वीएस 2015 स्थापित किया है और यह शानदार ढंग से काम करता है और जैसे टेस्ट कोड बनाता है

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

लेकिन जब मैं अपनी परियोजना को रेपो में धकेलता हूं और सीआई इसे बनाने लगता है, तो असमर्थित होने के कारण निर्माण विफल हो जाता है ?

मैंने VS2015 को CI सर्वर पर भी स्थापित किया है, लेकिन इसे इस तरह उपयोग नहीं करता है। मैं क्या कर सकता हूँ?

CI - CruiseControl .NET बनाता है C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe


3
नीचे दिए गए लिंक से MS Build Tools 2015 को डाउनलोड करने वाले किसी भी व्यक्ति के पास पुराने (प्री-अपडेट) संस्करण के लिए है जिसमें बग्स हैं ... मुझे यहां एक लिंक मिला 2015 अपडेट 3.
bdrajer

जवाबों:


164

सुनिश्चित करें कि आप कॉल करें:

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

यह MsBuild का संस्करण है जो विज़ुअल स्टूडियो 2015 के साथ जहाज करता है और C # संकलक को कॉल करता है जो इसे समझता है। आप अपने स्टूडियो पर Visual Studio 2015 के किसी भी संस्करण को स्थापित करके या स्टैंड-अलोन Microsoft बिल्ड टूल्स 2015 को स्थापित करके MsBuild के इस संस्करण को प्राप्त कर सकते हैं ।

निम्नलिखित NuGet पैकेज के लिए एक संदर्भ जोड़ना भी नए संकलक के उपयोग को मजबूर करेगा:

Install-Package Microsoft.Net.Compilers

कृपया ध्यान दें कि इंस्टाल-पैकेज नवीनतम उपलब्ध संस्करण को लेगा, जो वह नहीं है जो आप खोज रहे हैं। इंस्टॉल करने से पहले, जारी किए गए मुद्दे को हल करने के लिए कृपया जारी नोट्स और निर्भरता की जांच करें, इससे निपटने वाले संस्करण के साथ, जो इस मामले में, वीएस 2015 के लिए अधिक विशिष्ट था।

तो विजुअल स्टूडियो 2015 के लिए:

Install-Package Microsoft.Net.Compilers -Version 1.0.0

2
क्या इस कारण से कोई चिंता है कि RyuJIT के बाद से कीड़े हैं या जो भी इतने सारे कीड़े हैं?
मास्लो

3
इस बारे में बस एक नोट, अगर आप अपने पेट एनव चर को अपडेट कर रहे हैं, तो पुराने स्थान को हटाना सुनिश्चित करें (उदा: C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319) क्योंकि यह अभी भी कॉल कर सकता है जब "msbuild निष्पादित" "cmd से
TheWebGuy

2
मुझे भी nuget पैकेज Microsoft.Net.Compilers स्थापित करना पड़ा: देखें stackoverflow.com/a/36774876/584714
DrGriff

2
क्या इसके बिना हर परियोजना में एक नगेट पैकेज स्थापित करना है? मेरे पास 100 परियोजनाएं हैं जिनकी आवश्यकता होगी और यह मुझे अनावश्यक लगता है। कहीं बग जैसा लगता है।
कोल डब्ल्यू

2
क्या किसी के पास @ColeW प्रश्न का उत्तर है?
ज़िनोव

61

आप अपने बिल्ड सर्वर पर VS2015 के बजाय "Microsoft बिल्ड टूल 2015" को स्थापित कर सकते हैं।

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

यह MSBuild को उसी पथ पर स्थापित करता है:

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

IMHO एक कारण है, क्यों सवाल उस पर्यावरण से संबंधित है। बेहतर होगा कि प्रश्न पर टिप्पणी करें।
जोगो

24
जैसा कि स्टैकओवरफ़्लो मुझे सवालों पर टिप्पणी करने की अनुमति नहीं देता है, मैंने इसे उसी तरह से पोस्ट किया जिस तरह से सिस्टम मुझे अनुमति देता है। और अगर आपको यह उपयोगी नहीं लगता है, तो बस इसे अनदेखा करें। मेरे लिए अपने बिल्ड सर्वर पर समाधान खोजते समय यह वीएस २०१५ को स्थापित करने के बजाय जाने का रास्ता था
मुहूर्त १५'१५

एक बार जब आप "Microsoft बिल्ड टूल्स 2015" (या "Microsoft बिल्ड टूल्स 2017") स्थापित कर लेते हैं, तो आपके पास यह भी नियंत्रण है कि आप विज़ुअल स्टूडियो के किस संस्करण का उपयोग समाधान बनाने के लिए करना चाहते हैं: MSBuild.exe / t: YourSolution.sln / p बनाएँ : VisualStudioVersion = 14.0 [इसे VS2010 के लिए 10.0 पर सेट करें, VS2015 के लिए 14.0 और VS2017 के लिए 15.0 पर]
एलेक्स संसेउ

Microsoft बिल्ड टूल 2015 अपडेट 3 को डाउनलोड और इंस्टॉल करने के लिए , कृपया पुराने वीएस डाउनलोड पर जाएं और Redistributables and Build Toolsअनुभाग पर जाएं।
RBT

12

आपके पास शायद यह काम पहले से ही है, लेकिन यह भविष्य में किसी और की मदद कर सकता है। मैं हाल ही में इस सवाल पर आया था और यह मुझे सही दिशा में आगे बढ़ा और आखिरकार एक समाधान निकला।

इसका एक अन्य संभावित समाधान MSBuild संस्करण को लक्षित करने के लिए अपनी प्रोजेक्ट फ़ाइलों को मैन्युअल रूप से अपडेट करना है जिन्हें आप अपनी परियोजनाओं के साथ बनाना चाहते हैं।

मैं हाल ही में एक TeamCity बिल्ड सर्वर अपडेट से गुजरा हूं और मैंने इस पर पहले से ही Microsoft बिल्ड टूल्स 2015 स्थापित कर लिया है। मुझे लगा कि बिल्ड सर्वर पर मेरे पास सब कुछ है, मेरे पास C # 6.0 को लक्षित करने वाला मेरा समाधान था, और मेरे पास प्रत्येक प्रोजेक्ट था। नेट 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">

उस लाइन के प्रमुख घटक के साथ ToolVersion इसका हिस्सा है। मैंने निम्नलिखित को पढ़ने के लिए बस अपनी परियोजना फाइलों पर इस लाइन को बदल दिया:

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

यहाँ अंतर यह था कि मैं संस्करण 14 को लक्षित कर रहा था, न कि 4. संस्करण 14.0 बिल्ड टूल्स 2015 से मेल खाता है। इसे बदलकर, मेरे टीम बिल्ड बिल्ड सर्वर ने सही MSBuild संस्करण का उपयोग किया और मेरा C # 6.0 कोड बनाने में सक्षम था।

मैं भी मैन्युअल रूप से अद्यतन करने के लिए किया गया था TargetFrameworkVersion xml नोड का उपयोग 4.6.1 का उपयोग करने के लिए क्योंकि VS2015 कुछ सही नहीं कर रहा था और मेरे स्थानीय बिल्ड को गड़बड़ कर दिया, लेकिन यह यहां प्रासंगिक नहीं है।

कृपया, अगर कोई गलत है तो मुझे कोई सही करेगा, लेकिन सिर्फ संदर्भ के लिए, मुझे लगता है कि संस्करण संख्याएं कुछ इस तरह से हैं:

4.0 = वीएस2012

12.0 = VS2013

14.0 = VS2015

15.0 = VS2017

मेरा मानना ​​है कि यदि आप .net 4.7 का उपयोग करना चाहते हैं, तो आपको बिल्ड टूल्स 2017 को स्थापित करना होगा और आपकी परियोजनाओं को 14.0 के बजाय 15.0 को लक्षित करना होगा, लेकिन मैंने इसे सत्यापित नहीं किया है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.