2016-11-20 37 views
8

Çeşitli platformları hedefleyen yeniden kullanılabilir bir kitaplık oluşturuyorum (.NET 4.0, .NET 4.5, .NETStandard 1.0 ve .NETStandard 1.3). Bu projenin .NET 4.5 sürümü, .NET 4.0 sürümünde bulunmayan bazı özellikler içerir.Visual Studio 2015 xproject (project.json), bağlı bir projenin en yüksek çerçevesine başvuruda bulunmasına nasıl izin verilir

Bu kitaplık projesine başvuran birim sınama projesinin tek bir hedef platformu vardır, yani NET 4.5.1. Bu test projesi, temel kütüphanenin .NET 4.5'in belirli özelliklerini test eden bazı kodları açıkça içermektedir.

Ne yazık ki, Visual Studio'nun açıkçası bu özelliği içermeyen .NETStandard 1.0 sürümüne başvurduğu için test projesi derlenmiyor.

sorunumu göstermek için, aşağıdaki iki projeye bu azaltılmış:

Çekirdek kütüphane:

{ 
    "version": "1.0.0-*", 

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

Kod dosyası:

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

#if NET40 
    public class ClassNet40 { } 
#endif 

#if NET45 
    public class ClassNet45 { } 
#endif 
} 

Testi kitaplığı:

{ 
    "version": "1.0.0-*", 

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

Kodu:

// 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(); 

Ne benim birim test proje derlemek ve belirli .NET 4.5 özellikleri test için izin değiştireyim?

+1

Benim durumumda (sağladığınız iki projeyle), Test kütüphanesi aslında "yeni CoreLibrary.ClassNet45();" ile derler. deyim ve _not_ "new CoreLibrary.ClassNetStandard();" ile derler. Yani, beklediğiniz gibi. Durumunda ClassNet45 ile gerçekten çalışmadığından emin misin? Çünkü Visual Studio'da "hatalar" penceresinde hatalar olduğunu, ancak yine de gerçekten başarılı bir şekilde derlediğini gösterebilir. – Evk

+0

@Evk: Haklısınız. Hem IDE hem de Hata Listesi bir hata göstermesine rağmen, derleme bin \ Debug \ net451 klasörüne derlenir. Bu meclisi Resharper ile inceledikten sonra işe yarıyor. Sonuç: Visual Studio Tooling berbat. – Steven

+0

VS 2015 için .NET Core araçlarının en son sürümünü buradan yüklemeyi deneyin: https://www.microsoft.com/net/core#windowsvs2015. Bu aslında benim için bunu çözdü (artık sahte hata yok). – Evk

cevap

1

.NET Core için Visual Studio araçlarında bir hata var gibi görünüyor. Birden çok çerçeveli projeye başka birinden başvuruda bulunduğunuzda, Visual Studio yalnızca listelenen çerçeveyi yalnızca bir listeden alır (sizin durumunuzda - "netstandard1.0") ve başvurulan projenin bu çerçeve için tek hedefli olduğunu kabul eder. Ancak, derleyici bunu doğru olarak ele alır ve bu projenin doğru oluşturduğu görünüyor - gerçekte değil. Diğer taraftan, ClassNet45 tanımını kullandığınızda - , gibi görünüyor (Visual Studio hataları gösterir) derleme değil - gerçekten başarıyla derleme yapar.

.NET Core için Visual Studio araçları henüz yeterince parlatılmamış gibi görünüyor, ancak muhtemelen bu hata yakın gelecekte çözülecektir.

+0

Eğer bir hata ise, Github'daki asıl konuya bağlanabilir misiniz? Bir böcek olduğunu söylüyorsun, ama bir çeşit kanıt olmadan, sadece bir varsayım. Bunun bir hata olduğunu nasıl doğruladınız? –

+0

@GeorgeStocker Eh, bu bir varsayımdır ve sanırım bunu belirtiyorum ("Bir hata var" ifadesi var). Davranışın yanlış olduğu oldukça açık olsa da - Visual Studio, içinde hatalar olduğunu ve bu nedenle derlememesi gerektiğini belirtirken, proje başarılı bir şekilde derlenir. Ne kadar güçlü doğrulama istediğinizden emin değilsiniz. – Evk

+0

@GeorgeStocker Asıl sorun için, Visual Studio için asp.net çekirdek araçları için github üzerinde 403 açık sorun var ve bildirilip bildirilmediğini anlamak çok kolay değil. Ama burada _similar_ sorunu var: https://github.com/aspnet/Tooling/issues/849. – Evk