2014-09-11 5 views
5

मेरे पास एक साधारण ASP.NET vNext क्लास लाइब्रेरी प्रोजेक्ट है जो सिस्टम में टाइप करते समय संकलित करने में विफल रहता है। डेटा का संदर्भ दिया जाता है; मैंने यहां क्या गलत किया है, या क्या vnext में कोई समस्या है?एडीओ.NET vNext संदर्भ ADO.NET टूटा

मैं इस तरह मेरी project.json की स्थापना:

{ 
    "dependencies": { 
     "System.Data.Common": "1.0.0-alpha3" 
    }, 

    "frameworks": { 
     "net451": { 
      "dependencies": { 
      } 
     }, 
     "k10": { 
      "dependencies": { 
      } 
     } 
    } 
} 

जबकि "System.Data.Common" संदर्भ टाइपिंग, nuget IntelliSense ठीक काम किया; फ़ाइल को सहेजने के बाद, पैकेज पुनर्स्थापना अपेक्षित के रूप में हुआ।

using System.Data; 

namespace MyProj.Common.Data 
{ 
    public interface IDbConnectionFactory 
    { 
     IDbConnection CreateConnection(); 
    } 
} 

निर्माण समय में यह बम:

त्रुटि 1 प्रकार या नाम स्थान का नाम 'IDbConnection' नहीं

तब मैं परियोजना जो संदर्भ देता System.Data.IDbConnection, इस तरह के लिए एक इंटरफेस जोड़ा (क्या आप एक प्रयोग निर्देश या असेंबली संदर्भ खो रहे हैं?) सी: \ उपयोगकर्ता \ प्रशासक \ Proj \ MyProj \ MyProj.Common \ Data \ IDbConnectionFactory.cs 7 9 MyProj.Common

मेरे केवीएम सूची:

 
C:\Users\Administrator\Proj\MyProj [next +3 ~2 -0 !]> kvm list 

Active Version   Runtime Architecture Location        Alias 
------ -------   ------- ------------ --------        ----- 
    * 1.0.0-alpha3  svr50 x64   C:\Users\Administrator\.kre\packages default 
     1.0.0-alpha3  svr50 x86   C:\Users\Administrator\.kre\packages 
     1.0.0-alpha3  svrc50 x64   C:\Users\Administrator\.kre\packages 
     1.0.0-alpha3  svrc50 x86   C:\Users\Administrator\.kre\packages 
     1.0.0-alpha4-10364 CLR  amd64  C:\Users\Administrator\.kre\packages 
     1.0.0-alpha4-10364 CLR  x86   C:\Users\Administrator\.kre\packages 
     1.0.0-alpha4-10364 CoreCLR amd64  C:\Users\Administrator\.kre\packages 
     1.0.0-alpha4-10364 CoreCLR x86   C:\Users\Administrator\.kre\packages 
     1.0.0-alpha4-10365 CLR  amd64  C:\Users\Administrator\.kre\packages 
     1.0.0-alpha4-10365 CLR  x86   C:\Users\Administrator\.kre\packages 


C:\Users\Administrator\Proj\MyProj [next +3 ~2 -0 !]> 

Can ASP.NET vNext use non-vNext references? सवाल बहुत समान लगता है, लेकिन यहाँ त्रुटि संदेश कुछ अलग है, और nuget IntelliSense पता चलता है कि ADO.NET संकुल K10 के लिए बनाया जाता है।

+0

मुझे अब vnext का प्रयास करना चाहिए :) – codebased

+1

अगर आपको बिल्ड त्रुटियां मिलती हैं और आपके प्रोजेक्ट.जेसन में कई रनटाइम परिभाषित होते हैं तो बस "केपीएम बिल्ड" कमांड का उपयोग करना है। यह देखना आसान है कि कौन सा रन टाइम असफल हो रहा है, कभी-कभी खराब संदर्भ के कारण केवल एक ही निर्माण करने में विफल रहता है। उम्मीद है कि वीएस 14 जारी होने से पहले वे इसे सुधारेंगे। – AndersNS

+0

अच्छी टिप, @AndersNS। मैं भी संकलक चेतावनी/त्रुटियों में सुधार की उम्मीद कर रहा हूं। –

उत्तर

7

आईडीबीकनेक्शन को .NET के डेस्कटॉप संस्करण में System.Data.dll में परिभाषित किया गया है। यह System.Data.Common में शामिल नहीं है, जिसमें केवल ADO.NET प्रकारों का एक उप-समूह शामिल है जो रनटाइम के विभिन्न संस्करणों में उपलब्ध होगा। यदि आप अपने एप्लिकेशन के साथ केवल डेस्कटॉप के खिलाफ काम करने में सक्षम हैं, तो .NET आपको पूर्ण System.Data.dll का संदर्भ देने में सक्षम होना चाहिए और इससे किसी भी प्रकार का उपयोग करना चाहिए। यदि आप CoreCLR आधारित रनटाइम को लक्षित करने में सक्षम होना चाहते हैं तो आपको System.Data.Common, जैसे परिभाषित प्रकारों से चिपकना चाहिए। इस मामले में आप डीबीकनेक्शन का उपयोग कर सकते हैं।

+0

ठीक है, ऐसा लगता है कि निर्माण सीएलआर के लिए काम करता है। यह भी प्रतीत होता है कि 'System.Data.Common' की' System.Data' पर निर्भरता है। क्या बाकी ADO.NET के कोरसीएलआर-संगत संस्करण को रिलीज़ करने की कोई योजना है? मैं जो भी सुझाव देता हूं वह कर सकता हूं और 'System.Data.Common' में टाइप करने के लिए बस चिपक सकता हूं, लेकिन अगर किसी भी समय' System.Data' उपलब्ध होगा, तो मैं बस उस समय के लिए सीएलआर के निर्माण के लिए खुद को प्रतिबंधित कर दूंगा किया जा रहा है। –

+0

System.Data.Common एक NuGet पैकेज है जो रनटाइम के विभिन्न संस्करणों में एक एकीकृत पोर्टेबल अनुबंध लागू करता है। अलग-अलग लक्ष्य प्लेटफ़ॉर्म के लिए अलग-अलग फ़ोल्डरों में अलग-अलग असेंबली शामिल हैं, जिनमें से प्रत्येक उस प्लेटफ़ॉर्म के लिए पर्याप्त रूप से अनुबंध को लागू करता है। चूंकि डेस्कटॉप .NET में पहले से ही System.Data.dll (और ADO.NET प्रदाताओं का एक संपूर्ण पारिस्थितिकी तंत्र उस पर निर्भर करता है), उस विशेष मामले का सबसे पर्याप्त तरीका सिस्टम के वास्तविक प्रकारों को अनुबंध के प्रकारों को अग्रेषित करना है। डेटा .dll। एसक्लक्लिएंट के लिए NuGet पैकेज समान रूप से काम करेगा। – divega

+1

दूसरी तरफ, कोरसीएलआर के लिए कोई प्रकार अग्रेषण नहीं है लेकिन अनुबंध सीधे लागू किया गया है। योजना System.Data.Common को एक सबसेट के रूप में रखना है और पूरे ADO.NET को इसमें नहीं लाया जाना है। हमने यह जानने के लिए काम किया है कि किस प्रकार के जरूरी थे और हम जानबूझकर इसे न्यूनतम रखते हैं।उस ने कहा, यदि आपके पास ऐसे प्रकारों पर कोई प्रतिक्रिया है जो आपको लगता है कि वर्तमान में गायब होना चाहिए, तो हमें बताएं। – divega

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