मैं एक पुन: प्रयोज्य लाइब्रेरी बना रहा हूं जो कई प्लेटफार्मों को लक्षित करता है (.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 सुविधाओं का परीक्षण करने की अनुमति के लिए बदलना चाहिए?
मेरे मामले में (आपके द्वारा प्रदान की गई दो परियोजनाओं के साथ), टेस्ट लाइब्रेरी वास्तव में "नई कोर लाइब्रेरी.क्लासनेट 45();" कथन और _not_ संकलित करता है "नया CoreLibrary.ClassNetStandard();"। तो, जैसा कि आप उम्मीद करेंगे। आप सुनिश्चित हैं कि यह वास्तव में आपके मामले में ClassNet45 के साथ काम नहीं करता है? क्योंकि यह दिखा सकता है कि विजुअल स्टूडियो में "त्रुटियों" विंडो में त्रुटियां हैं, लेकिन फिर भी वास्तव में सफलतापूर्वक संकलित हैं। – Evk
@Evk: आप सही हैं। हालांकि आईडीई और त्रुटि सूची दोनों एक त्रुटि दिखाते हैं, असेंबली bin \ Debug \ net451 फ़ोल्डर में संकलित हो जाती है। Resharper के साथ इस असेंबली का निरीक्षण करने के बाद, यह काम करता है। निष्कर्ष: विजुअल स्टूडियो टूलिंग बेकार है। – Steven
यहां से वीएस 2015 के लिए .NET कोर टूल्स का नवीनतम संस्करण स्थापित करने का प्रयास करें: https://www.microsoft.com/net/core#windowsvs2015। यह वास्तव में मेरे लिए यह हल किया गया (कोई नकली त्रुटियां और नहीं)। – Evk