2017-03-10 11 views
5

से एक नेट फ्रेमवर्क 4 (या मोनो) असेंबली को कॉल करना मेरे पास एक ही समाधान में .NET Framework 4.6.2 प्रोजेक्ट का संदर्भ देने वाला एक सरल नेट कोर कंसोल एप्लिकेशन है।नेट कोर एप्लिकेशन

error CS0012: The type 'Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.

Am मैं कुछ है कि अनुमति नहीं है करने के लिए कोशिश कर रहा है: जब मैं निर्माण, मैं निम्नलिखित त्रुटि मिलती है?

क्या नेट नेट एप्लिकेशन से .NET Framework 4.6 (या मोनो) असेंबली (या पी/Invoke) को संदर्भित करने का कोई तरीका है?

विजुअल स्टूडियो 2017 का उपयोग करना, नेट कोर 1.1

उत्तर

7

.NET कोर 1.x में, आपको .NET Framework 4.6 (या मोनो) असेंबली का संदर्भ देने की अनुमति नहीं है। .NET कोर 1.x और .NET Framework 2 अलग-अलग रनटाइम हैं, और उनके प्रकार मिश्रण नहीं करते हैं - जैसे बिल्ड त्रुटि संदेश कहता है।

इसके बजाय, आप जो भी कर सकते हैं वह है .NET Framework 4.6 असेंबली लक्ष्यीकरण ".NET मानक"। Read more about .NET Standard। .NET मानक के लिए लाइब्रेरी संकलित करने से पुस्तकालय .NET Framework, Mono, या .NET कोर पर चलने की अनुमति देता है। एक और विकल्प बहु-लक्ष्य है कि .NET Framework 4.6 असेंबली, इसलिए यह .NET Framework 4.6 और .NET Core 1.1 के लिए दोनों बनाता है। आपको केवल यह करना चाहिए यदि आपकी लाइब्रेरी की एपीआई को .NET मानक द्वारा समर्थित नहीं किया गया है। यह लगभग @ VMAtm के उत्तर जैसा ही है, लेकिन आप इसे वीएस 2017 में एकल .csproj के साथ कर सकते हैं।

अच्छी खबर यह है कि आप जो करने की कोशिश कर रहे हैं वह .NET Core 2.0 पर समर्थित होगा, जो कि है slated for release later this year

+1

मुझे संदर्भ के बारे में प्रदान किए गए लिंक में कोई उल्लेख नहीं दिख रहा है। नेट कोर से नेट फ्रेमवर्क असेंबली । क्या आप इसे विशेष रूप से इंगित कर सकते हैं अगर मैं इसे देख रहा हूं? साथ ही, नेट कोर एप्लिकेशन से .NET Framework असेंबली को P/Invoke (या समकक्ष) के लिए वर्तमान में कोई तरीका है। (मान लीजिए कि मेरे पास नेट फ्रेमवर्क असेंबली के लिए केवल बाइनरी है)? – Verax

+1

द।[नेट नेट मानक ब्लॉग शुरू करने] के लिंक के ऊपर नेट मानक लिंक (https://blogs.msdn.microsoft.com/dotnet/2016/09/26/introducing-net-standard/)। उस पोस्ट में 'यह संगतता शिम एक पुल प्रदान करता है जो आपको अपने पुस्तकालयों को .NET मानक में कनवर्ट करने में सक्षम बनाता है, मौजूदा पुस्तकालयों को संदर्भित करने के बिना अभी तक परिवर्तित नहीं किया गया है।' नहीं, लोड करने का कोई तरीका नहीं है/.NET कोर 1.1 पर .NET Framework असेंबली चलाएं, क्योंकि .NET Core 1.1 में कोई "संगतता शिम" नहीं है। –

+0

"अच्छी खबर यह है कि आप जो करने की कोशिश कर रहे हैं उसे .NET कोर 2.0 पर समर्थित किया जाएगा, जिसे इस वर्ष के अंत में रिलीज के लिए रखा गया है।" मुझे रोडमैप में कुछ भी नहीं दिख रहा है कि यह क्षमता 2.0 में जोड़ दी जाएगी। क्या आप एक स्रोत उद्धृत कर सकते हैं? संपादित करें: कभी नहीं, मैं इसे अब देखता हूं। – Verax

1

नेट कोर और नेट 4.0 विभिन्न मुख्य लाइब्रेरीज है। पुराने से System.Object टाइप करें। नेट पुस्तकालयों को mscorlib में परिभाषित किया गया है, जिसे स्पष्ट रूप से संदर्भित नहीं किया गया है।

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

संपादित करें: हालांकि, Shared project के रूप में जाना जाने वाला एक आम दृष्टिकोण है, आप इसके बारे में here पढ़ सकते हैं। इसके अलावा इस quaestion आपके लिए उपयोगी हो सकता है:

.net core classlibrary calling .net framework class library

इसके अलावा, आप एक पोर्टेबल वर्ग पुस्तकालय, जो या तो नेट कोर और नेट 4.6 पुस्तकालय से संदर्भित किया जा सकता बनाने के लिए कोशिश कर सकते हैं।

Portable class libraries are great when your common code is platform-independent as well as for reusable libraries where the platform-specific code can be factored out.

# 2 संपादित करें: @EricErhardt उल्लेख किया है, आप विभिन्न लक्ष्यीकरण, जो एक विकल्प नहीं हो सकता है अगर आप एक स्रोत कोड की जरूरत नहीं है के साथ अपने नेट 4.6 पुस्तकालय पुन: संयोजित कर सकते हैं।

+1

मुझे वास्तव में कोड साझा करने में दिलचस्पी नहीं है (हालांकि मेरा परीक्षण इस तरह से निहित हो सकता है)। मैं नेट नेट एप्लिकेशन से नेट फ्रेमवर्क असेंबली को कॉल करना चाहता हूं। मैं अभी भी इस प्रश्न का उत्तर ढूंढ रहा हूं: क्या नेट नेट एप्लिकेशन से नेट फ्रेमवर्क 4.6 (या मोनो) असेंबली (या पी/इसे शामिल करें) को संदर्भित करने का कोई तरीका है? – Verax

+0

क्या आपने देखा लेख मैंने देखा है? – VMAtm

+0

हां, ज़ाहिर है मैंने इसे देखा, और उनका समाधान कोड साझा करना था, जिसमें मुझे कोई दिलचस्पी नहीं थी। – Verax

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