Dela via


.NET-klassbibliotek

Klassbibliotek är det delade bibliotekskonceptet för .NET. De gör att du kan komponentisera användbara funktioner i moduler som kan användas av flera program. De kan också användas som ett sätt att läsa in funktioner som inte behövs eller inte är kända vid programstart. Klassbibliotek beskrivs med filformatet .NET Assembly.

Det finns tre typer av klassbibliotek som du kan använda:

  • Plattformsspecifika klassbibliotek har åtkomst till alla API:er på en viss plattform (till exempel .NET Framework i Windows, Xamarin iOS), men kan bara användas av appar och bibliotek som riktar sig mot den plattformen.
  • Portabla klassbibliotek har åtkomst till en delmängd API:er och kan användas av appar och bibliotek som riktar sig till flera plattformar.
  • .NET Standard-klassbibliotek är en sammanslagning av det plattformsspecifika och bärbara bibliotekskonceptet till en enda modell som ger det bästa av båda.

Plattformsspecifika klassbibliotek

Plattformsspecifika bibliotek är bundna till en enda .NET-plattform (till exempel .NET Framework i Windows) och kan därför ta betydande beroenden i en känd körningsmiljö. En sådan miljö exponerar en känd uppsättning API:er (.NET och OS-API:er) och underhåller och exponerar förväntat tillstånd (till exempel Windows-register).

Utvecklare som skapar plattformsspecifika bibliotek kan utnyttja den underliggande plattformen fullt ut. Biblioteken körs bara på den angivna plattformen, vilket gör plattformskontroller eller andra former av villkorsstyrd kod onödiga (modulo-kod för enskild källkod för flera plattformar).

Plattformsspecifika bibliotek har varit den primära klassbibliotekstypen för .NET Framework. Även när andra .NET-implementeringar uppstod förblev plattformsspecifika bibliotek den dominerande bibliotekstypen.

Portabla klassbibliotek

Portabla bibliotek stöds i flera .NET-implementeringar. De kan fortfarande ha beroenden i en känd körningsmiljö, men miljön är en syntetisk miljö som genereras av skärningspunkten för en uppsättning konkreta .NET-implementeringar. Exponerade API:er och plattformsantaganden är en delmängd av vad som skulle vara tillgängligt för ett plattformsspecifikt bibliotek.

Du väljer en plattformskonfiguration när du skapar ett portabelt bibliotek. Plattformskonfigurationen är den uppsättning plattformar som du behöver stöd för (till exempel .NET Framework 4.5+, Windows Telefon 8.0+). Ju fler plattformar du väljer att stödja, desto färre API:er och färre plattformsantaganden kan du göra, den lägsta gemensamma nämnaren. Den här egenskapen kan vara förvirrande i början, eftersom människor ofta tycker att "mer är bättre" men upptäcker att fler plattformar som stöds resulterar i färre tillgängliga API:er.

Många biblioteksutvecklare har gått från att skapa flera plattformsspecifika bibliotek från en källa (med hjälp av villkorliga kompileringsdirektiv) till bärbara bibliotek. Det finns flera metoder för att komma åt plattformsspecifika funktioner i bärbara bibliotek, där bait-and-switch är den mest accepterade tekniken just nu.

Klassbibliotek för .NET Standard

.NET Standard-bibliotek ersätter de plattformsspecifika och portabla biblioteksbegreppen. De är plattformsspecifika i den meningen att de exponerar alla funktioner från den underliggande plattformen (inga syntetiska plattformar eller plattformskorsningar). De är bärbara i den meningen att de fungerar på alla stödplattformar.

.NET Standard exponerar en uppsättning bibliotekskontrakt. .NET-implementeringar måste stödja varje kontrakt helt eller inte alls. Varje implementering stöder därför en uppsättning .NET Standard-kontrakt. Följden är att varje .NET Standard-klassbibliotek stöds på de plattformar som stöder dess kontraktsberoenden.

.NET Standard exponerar inte hela funktionen i .NET Framework (det är inte heller ett mål), men biblioteken exponerar många fler API:er än portabla klassbibliotek.

Följande implementeringar stöder .NET Standard-bibliotek:

  • .NET Core
  • .NET Framework
  • Mono
  • Universal Windows Platform (UWP)

Mer information finns i .NET Standard.

Monoklassbibliotek

Klassbibliotek stöds på Mono, inklusive de tre typer av bibliotek som beskrevs tidigare. Mono ses ofta som en plattformsoberoende implementering av .NET Framework. Delvis beror det på att plattformsspecifika .NET Framework-bibliotek kan köras på Mono-körningen utan ändring eller omkompilering. Denna egenskap var på plats innan du skapade portabla klassbibliotek, så var ett uppenbart val för att aktivera binär portabilitet mellan .NET Framework och Mono (även om det bara fungerade i en riktning).