2015-03-08 5 views
237

मैंने सी # 6.0 उपहारों के साथ एक नमूना प्रोजेक्ट बनाया - शून्य प्रक्षेपण और गुण प्रारंभिक उदाहरण उदाहरण के रूप में, लक्ष्य संस्करण .NET 4.0 सेट करें और यह ... काम करता है।क्या सी # 6.0 .NET 4.0 के लिए काम करता है?

public class Cat 
{ 
    public int TailLength { get; set; } = 4; 

    public Cat Friend { get; set; } 

    public string Mew() { return "Mew!"; } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     var cat = new Cat {Friend = new Cat()}; 
     Console.WriteLine(cat?.Friend.Mew()); 
     Console.WriteLine(cat?.Friend?.Friend?.Mew() ?? "Null"); 
     Console.WriteLine(cat?.Friend?.Friend?.TailLength ?? 0); 
    } 
} 
के लिए सी # 6.0
  • Wikipedia says .NET फ़्रेमवर्क 4.6 है।
  • This question (और Visual Studio 2015 सीटीपी परीक्षण) का कहना है कि सीएलआर संस्करण 4.0.3031 9.0 है।
  • This MSDN page कहता है कि .NET 4, 4.5, 4.5.2 सीएलआर 4 का उपयोग करता है। .NET 4.6 के बारे में कोई जानकारी नहीं है।

क्या इसका मतलब यह है कि मैं अपने सॉफ़्टवेयर के लिए सी # 6.0 सुविधाओं का उपयोग कर सकता हूं जो .NET 4.0 को लक्षित करता है? क्या कोई सीमाएं या कमी है?

+6

नेट संस्करण 2.0 - 3.5 सीएलआर v2.0 का उपयोग करें। नए संस्करण सीएलआर v4.0 का उपयोग करते हैं। – i3arnon

+0

ध्यान रखें कि, बुद्धिमानी अनुकूलित करें: आप प्रत्येक बिल्ली के लिए – Terence

+2

मेरी भलाई के लिए अलग-अलग if-null-check जोड़ रहे हैं। मैं सिर्फ डब्ल्यूसीएफ लक्ष्यीकरण v4.6 विकसित कर रहा हूं जिसे "याद दिलाया गया" है कि उत्पादन सर्वर को 2018 तक अपग्रेड नहीं किया जाना चाहिए। मैंने सोचा कि एक महीने के काम के लिए रिफैक्टरिंग के कुछ दिनों की आवश्यकता होगी। पांच मिनट में समाप्त हो गया। धन्यवाद, माइक्रोसॉफ्ट! : डी –

उत्तर

253

हां (अधिकतर)। सी # 6.0 को नए रोज़लिन कंपाइलर की आवश्यकता है, लेकिन नया कंपाइलर पुराने फ्रेमवर्क संस्करणों को लक्षित करने के लिए संकलित कर सकता है। यह केवल नई सुविधाओं तक ही सीमित है जो को फ्रेमवर्क से समर्थन की आवश्यकता नहीं है।

उदाहरण के लिए, आप (के रूप में यह string.Format के लिए एक कॉल में जो परिणाम) नेट के पिछले संस्करणों के साथ सी # 6.0 में स्ट्रिंग प्रक्षेप सुविधा का उपयोग कर सकते हैं, जबकि:

int i = 3; 
string s = $"{i}"; 

आप इसे उपयोग करने के लिए नेट 4.6 की जरूरत है साथ IFormattable के रूप में केवल नए ढांचा संस्करण System.FormattableString जोड़ता है:

int i = 3; 
IFormattable s = $"{i}"; 

मामलों आप का उल्लेख काम करने के लिए ढांचे से प्रकार की जरूरत नहीं है। तो संकलक पुरानी ढांचे के संस्करणों के लिए इन सुविधाओं का समर्थन करने में पूरी तरह से सक्षम है।

+28

असल में, आपको नेट 4.6 की आवश्यकता नहीं है, इसमें कुछ ही प्रकार जोड़े गए हैं। आप उन्हें पुराने ढांचे में जोड़ सकते हैं। [यह कोड .NET 4.0 और 3.5 पर ठीक काम करता है।] (Https://gist.github.com/svick/e5b30f73146a501cc64f) – svick

+8

क्या कोई सूची है कि सी # 6 विशेषताएं .NET 4.0 में काम करती हैं? यह पूछने का एक और तरीका होगा: कौन सी नई सुविधाओं को ढांचे से समर्थन की आवश्यकता है और कौन सा नहीं है? – Rubenisme

+1

@ रूबेनिसमे मैं 'IFormattable' स्ट्रिंग इंटरपोलेशन के अलावा किसी अन्य के बारे में नहीं सोच सकता। – i3arnon

26

हां, आप पुराने ढांचे के लिए नए कंपाइलर्स का उपयोग कर सकते हैं और नई कंपाइलर सुविधाओं तक पहुंच प्राप्त कर सकते हैं (जब तक उन सुविधाओं को .NET 4.6 में पेश किए गए नए प्रकार की आवश्यकता नहीं होती है)।

इसके अन्य उदाहरण सी # 4.0 (.NET 4.0) के साथ डिफ़ॉल्ट मानकों के साथ विधियों के साथ पेश किए गए हैं लेकिन आप उन्हें .NET 2.0 (सी # 2.0) और .NET 3.5 (सी # 3.0) परियोजनाओं में उपयोग करने में सक्षम हैं।

आप कंपाइलर को खुश करने के लिए .NET 2.0 या .NET 3.0 if you do one small workaround में एक्सटेंशन विधियों (सी # 3.0 में पेश किए गए) का उपयोग करने में भी सक्षम हैं ताकि यह .NET 3.5 में पेश की गई एक विशेषता पा सके।

45

बस विकिपीडिया और अन्य लिंक को समझने के तरीके पर ध्यान केंद्रित करना चाहते हैं।

जब विकिपीडिया का कहना है कि सी # 6.0 .NET Framework 4.6 के साथ है, तो इसका मतलब यह है कि कंपाइलर का उत्पादन संस्करण (msc.exe) .NET Framework 4.6 रिलीज़ का हिस्सा होगा। multi-targeting के माध्यम से, ऐसे कंपाइलर .NET Framework रिलीज़ के निम्न संस्करणों का समर्थन कर सकते हैं। बेशक, चूंकि रोज़लिन एक ओपन सोर्स प्रोजेक्ट बन गया है, इसलिए संकलक अब पूरी तरह से एक व्यक्तिगत घटक है।

जब कुछ 4.0.3031 9 (.0) के सीएलआर संस्करण को संदर्भित करता है, तो यह वास्तव में .NET Framework 4. * (4.0, 4.0। *, 4.5, 4.5। *, 4.6, 4.6। *) हो सकता है, जैसा कि वे सभी सीएलआर संस्करण 4 विनिर्देश लागू करते हैं। ज़ामरिन/मोनो का उल्लेख नहीं करना चाहिए, उसी सीएलआर विनिर्देश को भी लागू करें।

एमएसडीएन पृष्ठ अभी तक पूरी तरह से अपडेट नहीं हुआ है, लेकिन some page में पहले से ही संस्करण सूचना अनुभाग में सूचीबद्ध .NET Framework 4.6 है।

सभी में, भाषा चश्मा (साथ ही सी # कंपाइलर), सीएलआर चश्मा, और .NET फ्रेमवर्क रिलीज एक दूसरे के साथ कसकर नहीं मिलते हैं। यह पुराने सीएलआर और .NET फ्रेमवर्क को लक्षित करने के लिए नए कंपाइलर्स का उपयोग करने के लिए डेवलपर्स को पर्याप्त लचीलापन देता है।

0

आप इमारत ascripts उपयोग कर रहे हैं नए बिल्डर के लिए पथ को बदलने के लिए याद रखें:

सेट CPATH = C: \ प्रोग्राम फ़ाइलें (x86) \ MSBuild \ 14.0 \ बिन

[Rebuild.bat]

set CPATH=C:\Program Files (x86)\MSBuild\14.0\Bin 
call nuget_restore.bat 
"%CPATH%\msbuild" YourSolution.sln /t:Rebuild /p:Configuration=Release /fileLogger /flp:logfile=JustErrors.log;errorsonly /verbosity:minimal 

if %errorlevel% neq 0 goto ERROR 

REM call deploy Release //Things like deploy files.. 
goto END 

:ERROR 
     echo ERROR: %errorlevel% 
     pause 

:END 
संबंधित मुद्दे