2009-10-23 5 views
6

क्या सीएलआर 2.0 पर सी # 4.0 कंपाइलर द्वारा उत्पादित किया जा सकता है?सीएलआर 2.0 पर चलने वाले सी # 4.0 कंपाइलर द्वारा उत्पादित किया जा सकता है?

स्पष्ट करने के लिए, मैं VS 2010 के बारे में पूछ नहीं कर रहा हूँ बहु लक्ष्य (जहां वी.एस. चुनता सही संकलक संस्करण), मुझे पता है कि Csc.exe 4.0 बहु लक्ष्य-निर्धारण का समर्थन करता है, तो चाहते हैं ...

उत्तर

7

यदि अन्य सभी विफल हो जाते हैं, तो इसे आजमाएं। मैं सिर्फ VS2010b2 में निम्नलिखित परीक्षण किया है को लक्षित 2.0 संकलित,:

using System;  
class Program { 
    static void Main() { 
     Write(); 
     Write(msg: "world"); 
     Console.ReadLine(); 
    } 
    static void Write(string msg = "Hello") { 
     Console.WriteLine(msg); 
    } 
} 

यह दो नए सी # 4.0 भाषा सुविधाओं, जो मेटा डेटा नेट 2.x में भी मौजूद है कि का उपयोग का उपयोग करता है/3 एक्सएक्स/सीएलआर 2; यह मेरी नियमित (सीएलआर 2) मशीन पर ठीक निष्पादित करता है (मेरा वीएस -2010 बी 2 एक वीएम है)। तो मैंने निष्कर्ष निकाला "हाँ, कुछ विशेषताओं के लिए"। जाहिर है यदि आप ढांचे-निर्भर सुविधा (dynamic, आदि) का उपयोग करते हैं तो यह बहुत अच्छा नहीं होगा।

संपादित करें: अपनी टिप्पणी फिर से करें; मैंने कमांड लाइन पर csc की कोशिश की है, और डिफ़ॉल्ट रूप से यह लक्ष्य सीएलआर 4 है; मैं यह देखने की कोशिश करूंगा कि क्या मैं इसे सीएलआर 2 को लक्षित करने के लिए प्राप्त कर सकता हूं (जैसे वीएस स्पष्ट रूप से कर सकता है)। दुर्भाग्य से, यह नहीं रह गया है (नाटक किया, Btw) आदेश का निर्माण उत्पादन विंडो में लाइन ...

अद्यतन शामिल हैं:

दर्रा/nostdlib और एक: कुछ "जानकार" लोगों के साथ वापस आ गया 2.0 mscorlib.dll के संदर्भ में।

और यकीन है कि पर्याप्त:

C:\Windows\Microsoft.NET\Framework\v4.0.21006>csc /nostdlib /reference:%SystemRo 
ot%\microsoft.net\framework\v2.0.50727\mscorlib.dll /out:c:\my.exe /target:exe " 
C:\Users\Marc\Documents\Visual Studio 2010\Projects\ConsoleApplication6\ConsoleA 
pplication6\program.cs" 
Microsoft (R) Visual C# 2010 Compiler version 4.0.21006.1 
Copyright (C) Microsoft Corporation. All rights reserved. 

ठीक काम करता है (exe मेरी गैर 4.0 मशीन पर काम करता है)। क्रेडिट: केविन पिल्च-बिस्सन

1

सी # 4.0 .NET CLR 4.0 का उपयोग करता है इसलिए सीएलआर 2.0 के साथ कोई बाइनरी संगतता नहीं होगी। हालांकि आप 2.0 ढांचे को लक्षित करने में सक्षम होंगे।

+0

द्विआधारी तुलनात्मकता क्या है? –

+0

बॉब 'संगतता' –

+0

हाहा सही एड कहने का मतलब था, आपको पता है कि जब आप वर्तनी जांच पर भरोसा नहीं कर सकते हैं तो आप जादू नहीं कर सकते। धन्यवाद! – Bob

1

यह कंपाइलर पर निर्भर करता है।

संकेत अब तक संकेत देते हैं कि सी # 4.0 कंपाइलर .NET 2.0 रनटाइम को लक्षित करने में सक्षम होगा, आईएल उत्पन्न करता है जो उस रनटाइम के साथ संगत है और यह सुनिश्चित करता है कि आप केवल उन असेंबली को संदर्भित करें जो .NET 2.0 पर चलते हैं।

ध्यान दें कि लक्ष्यीकरण एक विकल्प है, हालांकि - और इस बात की कोई गारंटी नहीं है कि किसी भी अन्य कंपाइलर में एक ही सुविधा होगी।

अधिकतर, मुझे लगता है कि यह एक ऐसा निर्णय है जो संकलक को लागू करने वाली टीम द्वारा किया जाएगा।

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

.NET ढांचे का उपयोग करने वाले अन्य विक्रेता अन्य निर्णय ले सकते हैं।

+0

मुझे पता है कि मैं csc.exe 3.5 के साथ सीएलआर 2.0 को लक्षित कर सकता हूं, इसलिए मैंने विशेष रूप से सी # 4.0 कंपाइलर के बारे में पूछा और वीएस नहीं। वीएस 2010 अब बीटा 2 है, इसलिए मुझे लगता है कि mutitargeting का समर्थन करने का निर्णय किया गया है, हालांकि आप इसके बारे में निश्चित नहीं हैं ... –

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