2016-11-20 6 views
8

मैं एक पुन: प्रयोज्य लाइब्रेरी बना रहा हूं जो कई प्लेटफार्मों को लक्षित करता है (.NET 4.0, .NET 4.5, .NETStandard 1.0 और .NETStandard 1.3)। इस प्रोजेक्ट के .NET 4.5 संस्करण में कुछ विशेषताएं हैं जो .NET 4.0 संस्करण के अंतर्गत उपलब्ध नहीं हैं।एक विजुअल स्टूडियो 2015 xproject (project.json) को एक निर्भर परियोजना के उच्चतम ढांचे का संदर्भ कैसे दें

यूनिट परीक्षण परियोजना जो इस लाइब्रेरी प्रोजेक्ट का संदर्भ देती है, में एक एकल लक्ष्य प्लेटफ़ॉर्म है, अर्थात नेट 4.5.1। इस परीक्षण परियोजना में स्पष्ट रूप से कुछ कोड शामिल हैं जो मूल पुस्तकालय की .NET 4.5 विशिष्ट विशेषताओं का परीक्षण करता है।

दुर्भाग्य से हालांकि, परीक्षण प्रोजेक्ट संकलित नहीं होता है, क्योंकि विजुअल स्टूडियो .NETStandard 1.0 संस्करण का संदर्भ देता है, जिसमें स्पष्ट रूप से यह सुविधा नहीं है।

मेरी समस्या का प्रदर्शन करने के लिए, मैं निम्नलिखित दो परियोजनाओं को यह कम:

कोर पुस्तकालय:

{ 
    "version": "1.0.0-*", 

    "frameworks": { 
    "netstandard1.0": { 
     "dependencies": { 
     "NETStandard.Library": "1.6.0" 
     } 
    }, 
    "net40": {}, 
    "net45": {} 
    } 
} 

कोड फ़ाइल:

namespace CoreLibrary 
{ 
#if NETSTANDARD1_0 
    public class ClassNetStandard { } 
#endif 

#if NET40 
    public class ClassNet40 { } 
#endif 

#if NET45 
    public class ClassNet45 { } 
#endif 
} 

टेस्ट पुस्तकालय:

{ 
    "version": "1.0.0-*", 

    "dependencies": { 
    "CoreLibrary": { "target": "project" } 
    }, 
    "frameworks": { 
    "net451": {} 
    } 
} 

कोड:

// This compiles 
new CoreLibrary.ClassNetStandard(); 

// This doesn't. 
// error: Type or namespace 'ClassNet40' does not exist in namespace 'CoreLibrary' 
new CoreLibrary.ClassNet40(); 
// error: Type or namespace 'ClassNet45' does not exist in namespace 'CoreLibrary' 
new CoreLibrary.ClassNet45(); 

मुझे अपने इकाई परीक्षण परियोजना संकलन और विशिष्ट .NET 4.5 सुविधाओं का परीक्षण करने की अनुमति के लिए बदलना चाहिए?

+1

मेरे मामले में (आपके द्वारा प्रदान की गई दो परियोजनाओं के साथ), टेस्ट लाइब्रेरी वास्तव में "नई कोर लाइब्रेरी.क्लासनेट 45();" कथन और _not_ संकलित करता है "नया CoreLibrary.ClassNetStandard();"। तो, जैसा कि आप उम्मीद करेंगे। आप सुनिश्चित हैं कि यह वास्तव में आपके मामले में ClassNet45 के साथ काम नहीं करता है? क्योंकि यह दिखा सकता है कि विजुअल स्टूडियो में "त्रुटियों" विंडो में त्रुटियां हैं, लेकिन फिर भी वास्तव में सफलतापूर्वक संकलित हैं। – Evk

+0

@Evk: आप सही हैं। हालांकि आईडीई और त्रुटि सूची दोनों एक त्रुटि दिखाते हैं, असेंबली bin \ Debug \ net451 फ़ोल्डर में संकलित हो जाती है। Resharper के साथ इस असेंबली का निरीक्षण करने के बाद, यह काम करता है। निष्कर्ष: विजुअल स्टूडियो टूलिंग बेकार है। – Steven

+0

यहां से वीएस 2015 के लिए .NET कोर टूल्स का नवीनतम संस्करण स्थापित करने का प्रयास करें: https://www.microsoft.com/net/core#windowsvs2015। यह वास्तव में मेरे लिए यह हल किया गया (कोई नकली त्रुटियां और नहीं)। – Evk

उत्तर

1

.NET कोर के लिए विजुअल स्टूडियो टूल में एक बग प्रतीत होता है। जब आप किसी अन्य से बहु-फ्रेमवर्क प्रोजेक्ट का संदर्भ लेते हैं - विजुअल स्टूडियो केवल एक सूची से पहले सूचीबद्ध ढांचे को लेता है (आपके मामले में - "netstandard1.0") और इस फ्रेमवर्क के लिए संदर्भित परियोजना को संदर्भित करता है। हालांकि, कंपाइलर इसे सही तरीके से संभालता है, और जब यह लगता है कि प्रोजेक्ट सही तरीके से बनाता है - वास्तव में यह नहीं है। दूसरी तरफ, जब आप ClassNet45 परिभाषा का उपयोग करते हैं - यह लगता है कि यह संकलित नहीं होता है (विजुअल स्टूडियो त्रुटियों को दिखाता है) - यह वास्तव में सफलतापूर्वक संकलित करता है।

ऐसा लगता है कि .NET कोर के लिए विजुअल स्टूडियो टूल्स अभी तक पर्याप्त पॉलिश नहीं हैं, लेकिन शायद इस बग को कुछ निकट भविष्य में हल किया जाएगा।

+0

यदि यह एक बग है, तो क्या आप गिथब पर वास्तविक समस्या से लिंक कर सकते हैं? आप कहते हैं कि यह एक बग है, लेकिन बिना किसी सबूत के, यह सिर्फ एक अनुमान है। आपने कैसे सत्यापित किया कि यह एक बग था? –

+0

@ जॉर्जस्टॉकर वैसे यह supposition है, और मुझे लगता है कि मैं संकेत करता हूं कि ("वहाँ _ एक बग होने के लिए लगता है")। हालांकि यह स्पष्ट है कि व्यवहार गलत है - प्रोजेक्ट सफलतापूर्वक संकलित करता है जबकि विजुअल स्टूडियो इंगित करता है कि इसमें त्रुटियां हैं और इस तरह इसे संकलित नहीं करना चाहिए। सुनिश्चित नहीं है कि आप किस प्रकार का मजबूत सत्यापन चाहते हैं। – Evk

+0

@ जॉर्जस्टॉकर वास्तविक समस्या के लिए, विजुअल स्टूडियो के लिए एएसपीनेट कोर टूल्स के लिए जिथब पर 403 खुले मुद्दे हैं और यह पता लगाना बहुत आसान नहीं है कि यह रिपोर्ट किया गया था या नहीं। लेकिन यहां _similar_ मुद्दा है: https://github.com/aspnet/Tooling/issues/849। – Evk

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