.NET Core ve .NET Standard Class Library proje türleri arasındaki fark nedir?


814

Visual Studio'da, oluşturabileceğiniz en az 3 farklı sınıf kitaplığı türü vardır:

  • Sınıf Kütüphanesi (.NET Framework)
  • Sınıf Kütüphanesi (.NET Standardı)
  • Sınıf Kütüphanesi (.NET Core)

İlki yıllardır kullandığımız şey olsa da, yaşadığım büyük bir karışıklık .NET Standard ve .NET Core sınıf kitaplığı türlerinin ne zaman kullanılacağıdır. Son zamanlarda farklı çerçeve sürümlerini çoklu hedeflemeye çalışırken ve bir birim test projesi oluştururken bunu ısırdım .

Peki, Sınıf Kütüphanesi (.NET Standard) ve Sınıf Kütüphanesi (.NET Core) arasındaki fark nedir , neden ikisi de var ve ne zaman diğerini kullanmalıyız?


10
Birini kaçırdınız: Class Library (Portable). Çekirdek == çerçeve, .NET Standart == taşınabilir.
Hans Passant

4
Xamarin'den de bir tane vardı, ama bu diğerleri soruya herhangi bir değer katmıyor :)
Gigi

7
Onlar biliyorlar. Ana fikir, taşınabilir yaklaşımdan vazgeçtikleri, n'den çok fazla acı çektiği! sorun yolu çok fazla profilleri. Şimdi seçim yapabileceğiniz 7 standart var. Çoğu aslında şu anda taşınabilir değildir :) .NETCore uzun bir çekim tarafından yapılmaz, muhtemelen gittikleri klipte iki yıl daha sürer.
Hans Passant

12
OP "en az 3 farklı tip" dedi. Gönderi doğruydu.
Dan Friedman

1
Ne Standard'ın ne de Framework plakasının temel bir alt kümesi olmayan Core'un adıyla kafam karıştı. Ayrıca düzenli olarak .Net Core ile ilişkili ASP görüyoruz. Bu da çok kafa karıştırıcı ...
Alexis Pautrot

Yanıtlar:


611

Birini diğeri ne zaman kullanmalıyız?

Karar, uyumluluk ve API erişimi arasındaki bir ödünleşmedir.

Kitaplığınızla uyumlu olacak uygulamaların sayısını artırmak istediğinizde bir .NET Standart kitaplığı kullanın ve kitaplığınızın erişebileceği .NET API yüzey alanında bir azalma ile sorun yaşamazsınız.

Kütüphanenizin erişebileceği .NET API yüzey alanını artırmak istediğinizde bir .NET Core kütüphanesi kullanın ve yalnızca .NET Core uygulamalarının kütüphanenizle uyumlu olmasına izin vermenizde bir sakınca yoktur.

Örneğin, .NET Standard 1.3'ü hedefleyen bir kitaplık, .NET Framework 4.6, .NET Core 1.0, Universal Windows Platform 10.0'u ve .NET Standard 1.3'ü destekleyen diğer platformları hedefleyen uygulamalarla uyumlu olacaktır . Ancak kitaplığın .NET API'nin bazı bölümlerine erişimi olmayacak. Örneğin, Microsoft.NETCore.CoreCLRpaket .NET Core ile uyumludur, ancak .NET Standard ile uyumlu değildir.

Sınıf Kütüphanesi (.NET Standard) ve Sınıf Kütüphanesi (.NET Core) arasındaki fark nedir?

Paket tabanlı çerçeveler bölümü farkı açıklar.

Uyumluluk: .NET Standard'ı hedefleyen kitaplıklar, .NET Core, .NET Framework, Mono / Xamarin gibi .NET Standardı ile uyumlu herhangi bir çalışma zamanında çalışır. Öte yandan, .NET Core'u hedefleyen kitaplıklar yalnızca .NET Core çalışma zamanında çalışabilir.

API Yüzey Alanı: .NET Standard kitaplıklarında her şey NETStandard.Librarybulunurken, .NET Core kitaplıklarında her şey bulunur Microsoft.NETCore.App. İkincisi, bazıları .NET Standard kitaplığımıza (örneğin System.Threading.Thread) manuel olarak ekleyebileceğimiz ve bazıları .NET Standardı (örneğin Microsoft.NETCore.CoreCLR) ile uyumlu olmayan yaklaşık 20 ek kitaplık içerir .

Ayrıca, .NET Core kütüphaneleri bir çalışma zamanı belirler ve bir uygulama modeliyle birlikte gelir. Örneğin, birim test sınıfı kitaplıklarını çalıştırılabilir yapmak önemlidir.

Neden ikisi de var?

Kitaplıkları bir an için yok sayarak, .NET Standard'ın var olmasının nedeni taşınabilirliktir; .NET platformlarının uygulamayı kabul ettiği bir dizi API tanımlar. Bir .NET Standardını uygulayan herhangi bir platform, .NET Standardını hedefleyen kitaplıklarla uyumludur. Bu uyumlu platformlardan biri .NET Core.

Kitaplıklara geri dönersek, .NET Standard kitaplığı şablonları birden çok çalışma zamanında (API yüzey alanı pahasına) çalışacak şekilde bulunur. Tersine, .NET Core kütüphane şablonları daha fazla API yüzey alanına (uyumluluk pahasına) erişmek ve yürütülebilir bir dosya oluşturmak için bir platform belirlemek için mevcuttur.

Hangi .NET Standardının hangi .NET uygulamalarını desteklediğini ve ne kadar API yüzey alanının mevcut olduğunu gösteren etkileşimli bir matris .


2
Çok iyi bir cevap. (Gerçi ek bir soru ile ilgilidir Bu soru Bu, birim testlerin tutma koleksiyonlarına olmayan çalıştırılabilir sınıf kitaplıkları kullanılan Geçmişte, durum değildi birim testleri çalıştırmak için gerekli bir uygulama modelidir neden.?
Gigi

3
Bağlantılı soruya cevabımı güncelledim. TL; DR; Geçmişte, sınıf kütüphaneleri bir uygulama modeli içeren tam çerçeveyi hedeflemekteydi.
Shaun Luttin

Sınıf Kitaplığı'nı (.NET Framework) kapsamayı unuttunuz, .NET Standardı ve .NET Core ile uyumlu mu?
Tomas

8
Bu diyagram gerçekten anlamama yardımcı oldu.
jpaugh

1
@BerBar Orijinal soru .NET Standard ve .NET Core arasındaki fark hakkındaydı. Bu yüzden çapraz platform ayrıntılarını atladım, çünkü çapraz platform Core ve Standard arasında bir fark değil. Cevabımı kasten orijinal soruya dahil ettim.
Shaun Luttin

396

Bir .NET Core Class Library , .NET Standardı üzerine kurulmuştur . .NET Framework'e taşınabilir bir kitaplık uygulamak istiyorsanız ,. .NET Core ve Xamarin , bir .NET Standart Kütüphanesi seçin

.NET Core sonuçta .NET Standard 2'yi uygulayacak ( Xamarin ve .NET Framework gibi )

Bu nedenle .NET Core , Xamarin ve .NET Framework , .NET Standardının aromaları olarak tanımlanabilir

Uygulamalarınızı kod paylaşımı ve yeniden kullanım için geleceğe hazır hale getirmek için .NET Standard kitaplıkları kullanmayı tercih edersiniz.

Microsoft ayrıca Taşınabilir Sınıf Kitaplıkları yerine .NET Standardı kullanmanızı önerir .

MSDN'ye yetkili bir kaynak olarak alıntı yapmak için .NET Standard'ın Hepsini Yöneten Bir Kütüphane olması amaçlanmıştır . Resimler bin kelimeye bedel olduğu için, aşağıdakiler çok netleşecektir:

1. Geçerli uygulama senaryosunuz (parçalanmış)

Çoğumuz gibi, muhtemelen aşağıdaki durumdasınız: (.NET Framework, Xamarin ve şimdi .NET Core aromalı uygulamalar)

Resim açıklamasını buraya girin

2. .NET Standart Kütüphanesi sizin için ne sağlayacaktır (çerçeveler arası uyumluluk)

Bir .NET Standart Kitaplığı uygulamak, tüm bu farklı lezzetler arasında kod paylaşımına izin verir:

Hepsini Yönetecek Bir Kütüphane

Sabırsız için:

  1. .NET Standard , beklediğiniz ve sevdiğiniz tüm API'ları ihtiyacınız olan ortamlara getirerek .NET geliştiricileri için kod paylaşımı sorununu çözer: masaüstü uygulamaları, mobil uygulamalar ve oyunlar ve bulut hizmetleri:
  2. .NET Standart bir olan bir API seti tüm .NET platformları uygulamak zorunda . Bu , .NET platformlarını birleştirir ve gelecekteki parçalanmaları önler .
  3. .NET Standard 2.0 , .NET Framework , tarafından uygulanacaktır . NET Core ve Xamarin . İçin .NET Çekirdek , bu talep edilmiştir API'lerde birçok ekleyecektir.
  4. .NET Standard 2.0 , .NET Framework ikili dosyaları için bir uyumluluk şimi içerir ve .NET Standard kitaplıklarınızdan başvurabileceğiniz kitaplık kümesini önemli ölçüde artırır.
  5. .NET Standard , çok platformlu .NET kitaplıkları oluşturma aracı olarak Taşınabilir Sınıf Kitaplıkları'nın (PCL) yerini alacak .

Hangi .NET platformlarını çalıştırmak istediğinize bağlı olarak, hedefleyebileceğiniz en yüksek .NET Standard sürümünü anlamanıza yardımcı olacak bir tablo için buraya gidin .

Kaynaklar: MSDN: .NET Standardına Giriş


2
ASP.NET Core, aslında .NET Standard'ı hedeflediği için yalnızca .NET Core ile değil, tam .NET Framework ile kullanılabildiği için bu grafikte biraz yanlış yerleştirilmiştir.
Neme

2
Ancak tam .NET Framework ile bir ASP.NET Core uygulaması oluşturabilirsiniz - ASP.NET Core gerçekten .NET Standard ile aynı katmana aittir. Yalnızca .NET Core ile sınırlı değildir.
Neme

1
@Neme Öncelikle, evet .Net Core .Net Framework kitaplıklarını içerebilir, ancak platformlar arası yeniden kullanımı kaybedebilir (yalnızca Windows için - * nix veya OSX için değil veya Xamarin'de yeniden kullanma). Birçoğu platformlar arası faydalar (işletim sistemi seviyesi ve uygulama modeli seviyesi) ile ilgilenmeden full.Net Framework'te yazılan mevcut kütüphaneleri yeniden kullanmak ve kullanmak istedikleri için verilen bir durum ... yanlış, belki de bu görüntüleri yazan Microsoft ile tartışabilirsiniz ... :-)
user919426

3
.NET Core ve .NET Framework'ü birleştirmekten bahsetmiyorum. Demek istediğim, ASP.NET Core'un ismine rağmen .NET Core'a hiç bağımlı olmaması. .NET Standard'ı hedefleyen bir kitaplık olarak yazılmıştır, bu nedenle .NET Standard'ı kullanabileceğiniz her yerde kullanabilirsiniz. Evet, bu görüntüde bir hata yaptılar.
Neme

2
@OgrishMan .Net Standard'da yürütülebilir dosya oluşturamazsınız . Yalnızca, başka bir yürütme kodu tarafından başvurulan bir Sınıf Kitaplığı olabilir. Çalışma zamanı yok .
user919426

91

Yani kısa cevap:

IAnimal == .NetStandard (General)
ICat == .NetCore (Less General)
IDog == .NetFramework (Specific / oldest and has the most features)

26
@ Joe.wang gördüğüm gibi .NET Core ve .NET Framework arasındaki ilişkiyi bozması kötü. .NET Core kuş ise, .NET Framework kartal olamaz (belki kedi daha uygundur).
Lex Li

8
@LexLi haklı, bu suları çamurluyor. .NET Framework, .NET Core'un bir alt türü değildir.
Eric Eskildsen

6
Bu biraz süslü görünebilir ama doğru değil
afr0

3
@Joe'nin orijinal yorumu daha doğru geliyordu. tarafından düzenlenmiş cevap kafa karıştırıcı yaptı
Nandun

7
Köpeklerin kedilerden daha fazla özelliği var mı? Hayır :)
Nop

71

.NET ve .NET Core , .NET çalışma zamanının iki farklı uygulamasıdır. Hem Çekirdek hem de Çerçeve (ancak özellikle Çerçeve), Microsoft'un .NET için oluşturdukları birçok API ve derlemenin daha büyük veya daha küçük (veya yalnızca farklı) seçimlerini içeren, yüklü oldukları yere ve hangi profile bağlı olarak farklı profillere sahiptir.

Örneğin, Universal Windows uygulamalarında "normal" Windows profilindekinden farklı API'ler vardır. Windows'ta bile "İstemci" profilinizle "Tam" profiliniz olabilir. Ayrıca, kendi kütüphane setlerine sahip başka uygulamalar da ( Mono gibi ) vardır.

.NET Standard , API kitaplıkları ve derlemeleri kümelerinin kullanılabilir olması gereken bir özelliktir. .NET Standard 1.0 için yazılmış bir uygulama, .NET Standard 1.0 kitaplık koleksiyonu için destek veren herhangi bir Framework, Core, Mono, vb. Sürümünü derleyebilmeli ve çalışabilmelidir. Benzer şekilde .NET Standard 1.1, 1.5, 1.6, 2.0 vb. İçin de geçerlidir. Çalışma zamanı, programınız tarafından hedeflenen Standart sürümüne destek sağladığı sürece, programınız orada çalışmalıdır.

Standardın bir sürümünü hedefleyen bir proje, standardın bu revizyonunda yer almayan özellikleri kullanamaz. Bu, diğer montajlara veya diğer satıcılar tarafından yayınlanan API'lara (örneğin: NuGet'teki öğeler) bağımlı olamayacağınız anlamına gelmez. Ancak bu, aldığınız bağımlılıkların .NET Standard sürümünüz için de destek içermesi gerektiği anlamına gelir. .NET Standard hızla gelişiyor, ancak yine de yeterince yeni ve daha küçük çalışma zamanı profillerinden bazılarına dikkat ediyor, bu sınırlamanın boğulma hissi verebiliyor. (Bir buçuk yıl sonra not edin: bu değişmeye başlıyor ve son .NET Standard sürümleri çok daha güzel ve tam özellikli).

Öte yandan, Standard hedefleyen bir uygulama olmalıdır teoride bu cazip sözdür geniş dağıtım arayan bir sınıf kitaplığı projesi, vb Çekirdek, Framework, Mono, ile çalışabilir, çünkü daha dağıtım durumlarda kullanılmak üzere muktedir . Esas olarak dahili amaçlar için kullanılan bir sınıf kütüphanesi projesi için bu bir endişe kaynağı olmayabilir.

.NET Standard, sistem yöneticisi ekibinin Windows'taki ASP.NET'ten, felsefi veya maliyet nedeniyle Linux'ta .NET Core için ASP.NET'e geçmek istediği durumlarda da yararlı olabilir, ancak Geliştirme ekibi karşı çalışmaya devam etmek ister. Windows üzerinde Visual Studio'da NET Framework.


1
.NET Core ve .NET Standard'ın ne olduğuna dair iyi bir genel bakış olsa da, bu yanıt bunların her birini hedefleyen sınıf kitaplıklarıyla ilgili soruyu yanıtlayamaz.
Gigi

6
Hedefiniz buysa, sorunun "ne sorduğunuzun belirsizliği" olarak kapatılması gerekir, çünkü her zaman belirli bir kişinin ortamına giren çok fazla durumsal özellikler olacaktır. veya genel durumu soruyorsanız "Çok Geniş" olarak kullanabilirsiniz. Burada yapabileceğimiz tek şey size ürünler hakkında bilgi vermek, böylece kendi kararınızı verebilmeniz için bilgilendirilebilirsiniz.
Joel Coehoorn

Başka biri soruyu doğru bir şekilde cevapladığı için durum böyle değil. Benim sorum sınıf kütüphaneleriyle ilgiliydi. Cevabınız çerçevelerle ilgiliydi.
Gigi

29

.NET Framework ve .NET Core her iki çerçevedir.

.NET Standard bir standarttır (başka bir deyişle, bir belirtimdir).

.NET Framework ve .NET Core ile yürütülebilir bir proje (konsol uygulaması veya ASP.NET uygulaması gibi) yapabilirsiniz, ancak .NET Standard ile gerçekleştiremezsiniz.

.NET Standard ile yalnızca bağımsız olarak yürütülemeyen ve başka bir .NET Core veya .NET Framework yürütülebilir projesi tarafından referans verilmesi gereken bir sınıf kitaplığı projesi yapabilirsiniz.


20

Bunun, .NET Standard API yüzeyi ile diğer .NET platformları arasındaki ilişkiyi anlamaya yardımcı olacağını umuyoruz . Her arabirim bir hedef çerçeveyi, yöntemler ise bu hedef çerçevede bulunan API gruplarını temsil eder.

namespace Analogy
{
  // .NET Standard

interface INetStandard10
{
    void Primitives();
    void Reflection();
    void Tasks();
    void Xml();
    void Collections();
    void Linq();
}

interface INetStandard11 : INetStandard10
{
    void ConcurrentCollections();
    void LinqParallel();
    void Compression();
    void HttpClient();
}

interface INetStandard12 : INetStandard11
{
    void ThreadingTimer();
}

interface INetStandard13 : INetStandard12
{
    //.NET Standard 1.3 specific APIs
}

// And so on ...


// .NET Framework 

interface INetFramework45 : INetStandard11
{
    void FileSystem();
    void Console();
    void ThreadPool();
    void Crypto();
    void WebSockets();
    void Process();
    void Drawing();
    void SystemWeb();
    void WPF();
    void WindowsForms();
    void WCF();
}

interface INetFramework451 : INetFramework45, INetStandard12
{
    // .NET Framework 4.5.1 specific APIs
}

interface INetFramework452 : INetFramework451, INetStandard12
{
    // .NET Framework 4.5.2 specific APIs
}

interface INetFramework46 : INetFramework452, INetStandard13
{
    // .NET Framework 4.6 specific APIs
}

interface INetFramework461 : INetFramework46, INetStandard14
{
    // .NET Framework 4.6.1 specific APIs
}

interface INetFramework462 : INetFramework461, INetStandard15
{
    // .NET Framework 4.6.2 specific APIs
}

// .NET Core
interface INetCoreApp10 : INetStandard15
{
    // TODO: .NET Core 1.0 specific APIs
}
// Windows Universal Platform
interface IWindowsUniversalPlatform : INetStandard13
{
    void GPS();
    void Xaml();
}

// Xamarin 
interface IXamarinIOS : INetStandard15
{
    void AppleAPIs();
}

interface IXamarinAndroid : INetStandard15
{
    void GoogleAPIs();
}    
// Future platform

interface ISomeFuturePlatform : INetStandard13
{
    // A future platform chooses to implement a specific .NET Standard version.
    // All libraries that target that version are instantly compatible with this new
    // platform
}
}

Kaynak


17

Farkı açıklamanın bir başka yolu da gerçek dünya örnekleriyle olabilir, çünkü çoğumuz ölümlüler işi yapmak için mevcut araçları ve çerçeveleri (Xamarin, Unity, vb.) Kullanacaklardır.

Böylece, .NET Framework ile çalışmak için tüm .NET araçlarına sahipsiniz, ancak yalnızca Windows uygulamalarını (UWP, Winforms, ASP.NET, vb.) Hedefleyebilirsiniz. .NET Framework kapalı kaynak olduğundan, bu konuda yapılacak çok şey yoktur.

.NET Core ile daha az aracınız vardır, ancak ana Masaüstü Platformlarını (Windows, Linux, Mac) hedefleyebilirsiniz. Artık ASP.net'i Linux'ta (daha ucuz barındırma fiyatları) barındırabildiğiniz için bu özellikle ASP.NET Core uygulamalarında kullanışlıdır. Şimdi, .NET Core açık kaynaklı olduğundan, diğer platformlar için kütüphaneler geliştirmek teknik olarak mümkündür. Ama onu destekleyen çerçeveler olmadığı için, bunun iyi bir fikir olduğunu düşünmüyorum.

.NET Standard ile daha az aracınız vardır, ancak tüm platformları / çoğu platformları hedefleyebilirsiniz. Xamarin sayesinde Mobil'i hedefleyebilir ve Mono / Unity sayesinde Oyun Konsollarını bile hedefleyebilirsiniz. Güncelleme: UNO platformu ve Blazor ile web istemcilerini hedeflemek de mümkündür (her ikisi de şu anda biraz deneysel olsa da).

Gerçek bir dünya uygulamasında hepsini kullanmanız gerekebilir. Örneğin, aşağıdaki mimariye sahip bir satış noktası uygulaması geliştirdim:

Hem Sunucu hem de İstemci paylaştı:

  • Uygulamamın Modellerini işleyen bir .NET Standart kütüphanesi.
  • İstemciler tarafından gönderilen verilerin doğrulanmasını işleyen bir .NET Standart kitaplığı.

Bir .NET Standart kitaplığı olduğundan, başka herhangi bir projede (istemci ve sunucu) kullanılabilir.

Ayrıca sunucu ve istemcide aynı doğrulama uygulandığından emin olabilirsiniz çünkü bir .NET standart kitaplığında doğrulama sahip güzel bir avantajı. Sunucu zorunluyken, istemci trafiği azaltmak için isteğe bağlı ve kullanışlıdır.

Sunucu Tarafı (Web API'sı):

  • Tüm veritabanı bağlantılarını işleyen bir .NET Standard (Çekirdek de olabilir) kütüphanesi.

  • Rest API'sini işleyen ve veritabanı kitaplığını kullanan bir .NET Core projesi.

Bu .NET Core'da geliştirildiğinden uygulamayı bir Linux sunucusunda barındırabilirim.

İstemci Tarafı (WPF + Xamarin.Forms Android / IOS ile MVVM):

  • İstemci API bağlantısını işleyen bir .NET Standart kitaplığı.

  • ViewModels Logic'i işleyen bir .NET Standart kütüphanesi. Tüm görünümlerde kullanılır.

  • Windows uygulaması için WPF görünümlerini işleyen bir .NET Framework WPF uygulaması. Güncelleme: WPF uygulamaları şu anda yalnızca Windows üzerinde çalışmasına rağmen .NET çekirdeği olabilir. AvaloniaUI, diğer masaüstü platformları için Masaüstü GUI uygulamaları yapmak için iyi bir alternatiftir.

  • Xamarin Forms görünümlerini işleyen bir .NET Standart kitaplığı.

  • Bir Xamarin Android ve Xamarin IOS projesi.

Hem .NET Standard kitaplıklarını (İstemci API'sı ve ViewModels) hem de WPF, Xamarin ve IOS uygulamaları için mantıksız görünümler yapabildiğim için, uygulamanın istemci tarafında burada büyük bir avantaj olduğunu görebilirsiniz.


2
Bence bu gerçek dünyayı içerdiği için daha iyi bir cevap.
J Weezy

12

.NET Standardı: Büyük bir standart kütüphane olarak düşünün. Bunu bağımlılık olarak kullanırken yürütülebilir dosyaları değil, yalnızca kitaplıkları (.DLL) oluşturabilirsiniz. .NET standardı ile bağımlılık olarak yapılan bir kitaplık, bir .NET Core Windows / OS X / Linux projesi olan Xamarin.iOS, Xamarin.Android'e eklenebilir.

.NET Core: Eski .NET çerçevesinin devamı olarak düşünün, sadece açık kaynak kodlu ve bazı şeyler henüz uygulanmadı ve diğerleri kullanımdan kaldırıldı. Ekstra işlevlerle .NET standardını genişletir, ancak yalnızca masaüstlerinde çalışır . Bunu bağımlılık olarak eklerken, Windows, Linux ve OS X'te çalıştırılabilir uygulamalar yapabilirsiniz. (Şimdilik sadece konsol olsa da, GUI yok). Yani .NET Core = .NET Standard + masaüstüne özgü şeyler.

Ayrıca UWP bunu kullanır ve yeni ASP.NET Core da bağımlılık olarak kullanır.


8

.NET Standard temel olarak kod paylaşımını geliştirmek ve her bir .NET uygulamasında kullanılabilir API'leri daha tutarlı hale getirmek için mevcuttur.

Kitaplıklar oluştururken, .NET Kitaplığı, Mono vb. Gibi farklı .NET Framework sürümleriyle uyumlu olması için hedefi .NET Standard 2.0 olarak seçebiliriz .


2

Yukarıdaki cevaplar, net çekirdek, net standart ve net framwork arasındaki fark hakkında en iyi anlayışı açıklayabilir, bu yüzden bunu seçerken deneyimimi paylaşmak istiyorum.

.NET Framework, .NET Core ve .NET Standard arasında karıştırmanız gereken projede. Örneğin, sistemi .NET Core 1.0 ile oluşturduğumuzda, .net core ile barındıran Pencere Hizmetleri için destek yoktur.

Bir sonraki neden, .NET Core'u desteklemeyen Aktif Rapor kullanmamızdı. Bu yüzden hem .NET Core (asp.net core) hem de Windows Hizmet ve Raporlama (.NET Framework) için kullanılabilecek bir altyapı kütüphanesi oluşturmak istiyoruz.> Bu yüzden bu tür kütüphane için .NET Standardını seçtik. .NET standardını seçmek, kütüphanedeki her sınıfın basit ve çapraz .NET (çekirdek, çerçeve, standart) olması gerektiğini dikkatlice düşünmeniz gerektiği anlamına gelir.

Sonuç:

  • Altyapı kitaplığı ve paylaşılan ortak için .NET Standard. Bu lib'e .NET Framework ve .NET Core tarafından başvurulabilir.
  • Aktif Rapor, Pencere Hizmetleri gibi desteklenmeyen teknolojiler için .NET Framework (şimdi .NET 3.0 ile destekliyor).
  • Tabii ki ASP.NET Core için .NET Core.

Microsoft, .NET 5'i duyurdu: https://devblogs.microsoft.com/dotnet/introducing-net-5/


@Gigi Lütfen cevabımı dikkatle okuyun, 1.0 sürümünde .NET Core olduğunu söyledim ve bu durumda hem .NET core hem de .NET framework'ü birleştirmek için bir çözüm tasarlamak istiyoruz. ASP.NET Core, yukarıdaki .NET Framework 2.0'ı destekler. Cevabım, birden çok .NET sürümü ile uğraşmanız gerektiğinde bir hikaye. Bu yüzden, durumu doğru anlamadığınızda neden bir aşağı oyunuz olduğunu anlayamıyorum.
toannm

Cevabınız için teşekkürler - Cevabınızı okudum ve .NET Core 1.0'a atıfta bulunduğunuz kısmı okudum. Yine de bunu, sonuçlarınızı yorumlamanın bir ön koşulu olarak almadım, aksi takdirde mevcut sürümle okuyan insanları aldatır. Ayrıca, yorumumun bu sitede alışkın olduğum bir utanç olan Stack Overflow polisi tarafından çekildiği anlaşılıyor.
Gigi

0

.NET Framework Windows Formu, ASP.NET ve WPF uygulaması .NET Framework kütüphanesi kullanılarak geliştirilmelidir

.NET Standard Xamarin, IO'lar ve MAC OSx uygulaması .NET Standard kitaplığı kullanılarak geliştirilmelidir

.NET Core
Evrensel Windows Platformu (UWP) ve Linux uygulaması, .NET Core kütüphanesi kullanılarak geliştirilmelidir. API C ++ ile uygulanır ve C ++, VB.NET, C #, F # ve Javascript dillerini kullanabilirsiniz.


0

Bir .Net Core Sınıf Kütüphanesi .Net Standardı üzerine inşa edilmiştir. .Net Framework, .Net Core ve Xamarin'e taşınabilir bir kitaplık uygulamak istiyorsanız, bir .Net Standart Kitaplığı seçin


Cevabınız soru ile tamamen ilgili değil. lütfen revize
Avid Programcı
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.