आपके पास शायद यह काम पहले से ही है, लेकिन यह भविष्य में किसी और की मदद कर सकता है। मैं हाल ही में इस सवाल पर आया था और यह मुझे सही दिशा में आगे बढ़ा और आखिरकार एक समाधान निकला।
इसका एक अन्य संभावित समाधान 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 को लक्षित करना होगा, लेकिन मैंने इसे सत्यापित नहीं किया है।