2014-09-11 26 views
5

Basit bir ASP.NET vNext sınıf kitaplığı projem var; bu, System.Data'daki türlere başvurulduğunda derlenemiyor; Burada neyi yanlış yaptım yoksa vnext'te bir sorun mu var?ASP.NET vOnuçtan ADO.NET'e bir başvuru

Bu gibi benim project.json kurmak:

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

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

"System.Data.Common" referansı yazarak, Nuget intellisense iyi çalıştı ederken; Dosyayı kaydettikten sonra paket geri yükleme beklendiği gibi gerçekleşti. yapı anda

using System.Data; 

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

Bu bombalar:

Hata 1 tipi veya ad alanı adı 'IDbConnection' yapamadı

Sonra bu gibi System.Data.IDbConnection başvuran projeye bir arayüz eklendi bulundu ( başvurusunu kullanarak bir yönergesini veya eksikliğini biliyor musunuz?) C: \ Kullanıcılar \ Yönetici \ ProjelerProj \ MyProj.Common \ Data \ IDbConnectionFactory.cs 7 9 MyProj.Common

Benim KVM listesi:

 
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? soru çok benziyor, ama burada hata mesajı biraz farklıdır ve Nuget intellisense ADO.NET paketleri K10 için inşa olduğunu göstermektedir.

+0

vNext'i şimdi denemeliyim :) Hemen dene :) – codebased

+1

Yapılandırma hataları alırsanız ve projenizde tanımlanan birden fazla çalışma zamanınız varsa, sadece bir ipucu "kpm build" komutunu kullanmaktır. Hangi çalışma zamanının başarısız olduğunu görmek daha kolay, bazen de kötü bir başvuru nedeniyle sadece bir tanesi başarısız oluyor. Umarım VS14 yayınlanmadan önce bunu geliştirirler. – AndersNS

+0

Güzel bahşiş, @AndersNS. Ayrıca geliştirilmiş derleyici uyarıları/hataları için umuyorum. –

cevap

7

IDbConnection, .NET'in masaüstü sürümünde System.Data.dll dosyasında tanımlanmıştır. Çalışma zamanının farklı sürümlerinde kullanılabilen ADO.NET türlerinin yalnızca bir alt kümesini içeren System.Data.Common dosyasına dahil edilmez. Uygulamanızın yalnızca masaüstü .NET'e karşı çalışabilmeniz için yeterliyse, tam System.Data.dll dosyasına başvuruda bulunabilmeniz ve bu dosyaları kullanabilmeniz gerekir. CoreCLR tabanlı çalışma zamanını hedefleyebilmeniz için System.Data.Common, ör. bu durumda DbConnection'ı kullanabilirsiniz.

+0

Tamam, yapı CLR için çalışıyor gibi görünüyor. Ayrıca System.Data.Common'un 'System.Data''ya bağımlılığı olduğu ortaya çıkıyor. ADO.NET'in geri kalanının CoreCLR uyumlu sürümünü yayınlamaya yönelik herhangi bir plan var mı? Ben önerdiğin şeyi yapabilirim ve sadece System.Data.Common'daki tiplere yapışabilirim, fakat eğer tüm 'System.Data'' bir noktada kullanılabilir olursa, kendimi sadece CLR’ye göre inşa etmeyi tercih ederim. olmak. –

+0

System.Data.Common, çalışma zamanının farklı sürümlerinde birleşik bir taşınabilir sözleşme uygulayan bir NuGet paketidir. Farklı platformlar için farklı klasörlerde farklı montajlar yapıyorum. Her biri bu platform için daha uygun bir şekilde kontratı uyguluyor. Masaüstü .NET zaten System.Data.dll (ve ADO.NET sağlayıcılarının tüm ekosistemi buna bağlı) içerdiğinden, bu özel durum için en uygun yol, System.Data'daki gerçek türlere sözleşme türlerini iletmektir. .dll. SqlClient için NuGet paketi benzer şekilde çalışacaktır. – divega

+1

Diğer taraftan, CoreCLR için herhangi bir tip yönlendirme yok, ancak sözleşme doğrudan uygulanıyor. Plan, System.Data.Common'u bir alt küme olarak tutmak ve tüm ADO.NET'i buna dahil etmemek. Hangi türlerin gerekli olduğunu belirlemeye çalıştık ve kasıtlı olarak en az düzeyde tutuyoruz.Bu, şu anda eksik olduğunu düşündüğünüz türler hakkında herhangi bir geri bildiriminiz varsa, bize bildirin. – divega

İlgili konular