2017-03-08 8 views
11

निम्नलिखित सरल कोड ले लो। DoMyCode विधि में प्रविष्टियों के बीच एक स्थान के साथ दो विशेषताओं को लागू किया गया है।वीएस 2015 क्यों रिक्त स्थान से अलग गुणों को अनुमति देता है जबकि वीएस 2017 नहीं करता है?

using System; 

namespace AttributeSpaceTesting 
{ 
    class Program 
    { 
     static void Main(string[] args) { } 

     [Horse Cow] 
     static void DoMyCode() { } 
    } 

    [AttributeUsage(AttributeTargets.Method)] 
    class HorseAttribute : Attribute { } 

    [AttributeUsage(AttributeTargets.Method)] 
    class CowAttribute : Attribute { } 
} 

यह वीएस 2015 लक्ष्यीकरण .NET 4.6 में बनाया गया था।

यदि आप विजुअल स्टूडियो 2015 (अपडेट 3) में यह कोड चलाते हैं तो यह संकलित और कोई त्रुटि या चेतावनी के साथ चलाएगा।

 
Syntax error, ',' expected 

मैं क्यों इस त्रुटि होता है:

हालांकि, विजुअल स्टूडियो 2017 में ठीक उसी कोड चलाने निम्नलिखित अपवाद का उत्पादन करेगा। मुझे उम्मीद है कि आपको विशेषता वस्तुओं के बीच अल्पविराम की आवश्यकता होगी। सी # 5 विनिर्देशों की धारा 17.2 में:

एक विशेषता खंड में वर्ग ब्रैकेट की एक जोड़ी होती है, जो एक या अधिक विशेषताओं की अल्पविराम से अलग सूची को घेरती है।

तो वीएस 2015 में यह वाक्यविन्यास कानूनी क्यों है?


पूर्ण संदर्भ के लिए, मैं अपनी टीम की यूनिट परीक्षण परियोजनाओं पर वीएस 2017 का उपयोग करने के साथ प्रयोग कर रहा हूं। मैंने इस तरह की लाइनों को देखा है:

[Description(@"The Test Description")] 
[TestCategory("Regression"), TestCategory("Module"), TestCategory("ModuleRegression") TestMethod] 
public void TC_12345_VerifyTheThingWorks() 

जो नए विजुअल स्टूडियो सिस्टम में संकलित होने पर वाक्यविन्यास त्रुटियों का कारण बनता है।

+10

[यह एक बग था] (https://github.com/dotnet/roslyn/issues/14696), एक सुविधा नहीं, यह तय हो गया। –

+0

क्योंकि वीएस 15 को इसकी अनुमति नहीं देनी चाहिए थी। – Andrew

उत्तर

9

Hans Passant पर धन्यवाद जिन्होंने इस जानकारी को साझा किया।

ऐसा प्रतीत होता है कि यह वास्तव में a bug with the roslyn compiler था। अक्टूबर 2016 में यह रिपोर्ट उसी वर्ष जून में वीएस 2015 की अंतिम रिलीज के ठीक बाद हुई थी।

यह फिक्स विजुअल स्टूडियो 2017 में अपना रास्ता बना दिया, यही कारण है कि इस वाक्यविन्यास को एक त्रुटि के रूप में ठीक से रिपोर्ट किया गया है।

+0

इसके लिए धन्यवाद। मैं वीएस 2017 का उपयोग करने में जल्दबाजी में नहीं हूं। मैं हमेशा उन्नयन में जल्दी करता हूं। मैं उन्हें बग्स की रिपोर्ट होने के लिए थोड़ी देर के लिए आसपास रहना पसंद करूंगा। –

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