Dela via


Sammansättningar i .NET

Sammansättningar är de grundläggande enheterna för distribution, versionskontroll, återanvändning, aktiveringsomfång och säkerhetsbehörigheter för . NET-baserade program. En sammansättning är en samling typer och resurser som är byggda för att fungera tillsammans och bilda en logisk funktionsenhet. Sammansättningar har formen av körbara (.exe) eller dynamiska länkbibliotek (.dll) filer och är byggstenarna i .NET-program. De tillhandahåller den vanliga språkkörningen med den information som krävs för att känna till typimplementeringar.

I .NET och .NET Framework kan du skapa en sammansättning från en eller flera källkodsfiler. I .NET Framework kan sammansättningar innehålla en eller flera moduler. På så sätt kan större projekt planeras så att flera utvecklare kan arbeta med separata källkodsfiler eller moduler, som kombineras för att skapa en enda sammansättning. Mer information om moduler finns i How to: Build a multifile assembly (Så här skapar du en sammansättning med flera filer).

Sammansättningar har följande egenskaper:

  • Sammansättningar implementeras som .exe eller .dll filer.

  • För bibliotek som riktar in sig på .NET Framework kan du dela sammansättningar mellan program genom att placera dem i den globala sammansättningscache (GAC). Du måste ha starka namn innan du kan inkludera dem i GAC. Mer information finns i Starka namngivna sammansättningar.

  • Sammansättningar läses bara in i minnet om de behövs. Om de inte används läses de inte in. Därför kan sammansättningar vara ett effektivt sätt att hantera resurser i större projekt.

  • Du kan programmatiskt hämta information om en sammansättning med hjälp av reflektion. Mer information finns i Reflektion (C#) eller Reflektion (Visual Basic).

  • Du kan läsa in en assembly enbart för att inspektera den genom att använda MetadataLoadContext-klassen i .NET och .NET Framework. MetadataLoadContext ersätter Assembly.ReflectionOnlyLoad metoderna.

Sammansättningar i den vanliga språkkörningen

Assemblies tillhandahåller körmiljön med den information som krävs för att förstå typimplementeringar. För runtime finns ingen typ utanför kontexten för en assembly.

En sammansättning definierar följande information:

  • Kod som Common Language Runtime kör. Varje sammansättning kan bara ha en startpunkt: DllMain, WinMaineller Main.

  • Säkerhetsgränsen. En sammansättning är den enhet där behörigheter begärs och beviljas. Mer information om säkerhetsgränser i sammansättningar finns i Överväganden för sammansättningssäkerhet.

  • Typgränsen. Varje typs identitet innehåller namnet på den sammansättning där den finns. En typ som heter MyType som läses in i omfånget för en sammansättning är inte samma som en typ som heter MyType som läses in i omfånget för en annan sammansättning.

  • Referensomfattningsgränsen: Sammansättningsmanifestet har metadata som används för att matcha typer och uppfylla resursbegäranden. Manifestet anger vilka typer och resurser som ska exponeras utanför sammansättningen och räknar upp andra sammansättningar som den är beroende av. CIL-kod (Common Intermediate Language) i en portabel körbar fil (PE) körs inte om den inte har ett associerat sammansättningsmanifest.

  • Versionsgränsen. Sammansättningen är den minsta versionsbara enheten i den gemensamma språkmiljön. Alla typer och resurser i samma samling har samma version som en enhet. Sammansättningsmanifestet beskriver de versionsberoenden som du anger för alla beroende sammansättningar. För mer information om versionshantering, se Assembly-versionering.

  • Distributionsenheten: När ett program startar måste endast de sammansättningar som programmet ursprungligen anropar finnas. Andra sammansättningar, till exempel sammansättningar som innehåller lokaliseringsresurser eller verktygsklasser, kan hämtas på begäran. Den här processen gör att appar kan vara enkla och tunna när de först laddas ned. Mer information om hur du distribuerar sammansättningar finns i Distribuera program.

  • En sida vid sida-körningsenhet: Mer information om hur du kör flera versioner av en sammansättning finns i Sammansättningar och körning sida vid sida.

Skapa en sammansättning

Sammansättningar kan vara statiska eller dynamiska. Statiska sammansättningar lagras på en disk i bärbara körbara filer (PE). Statiska sammansättningar kan innehålla gränssnitt, klasser och resurser som bitmappar, JPEG-filer och andra resursfiler. Du kan också skapa dynamiska sammansättningar som körs direkt från minnet och inte sparas på disken före körning. Du kan spara dynamiska sammansättningar på disk när de har körts.

Det finns flera sätt att skapa sammansättningar. Du kan använda utvecklingsverktyg, till exempel Visual Studio som kan skapa .dll eller .exe filer. Du kan använda verktyg i Windows SDK för att skapa sammansättningar med moduler från andra utvecklingsmiljöer. Du kan också använda vanliga API:er för språkkörning, till exempel System.Reflection.Emit, för att skapa dynamiska sammansättningar.

Kompilera sammansättningar genom att skapa dem i Visual Studio, skapa dem med kommandoradsverktyg för .NET Core eller skapa .NET Framework-sammansättningar med en kommandoradskompilator. Mer information om hur du skapar sammansättningar med hjälp av .NET CLI finns i Översikt över .NET CLI.

Anmärkning

Om du vill skapa en sammansättning i Visual Studio går du till menyn Skapa och väljer Skapa.

Sammansättningsmanifest

Varje sammansättning har en sammansättningsmanifestfil . På samma sätt som i en innehållsförteckning innehåller sammansättningsmanifestet:

  • Sammansättningens identitet (dess namn och version).

  • En filtabell som beskriver alla andra filer som utgör sammansättningen, till exempel andra sammansättningar som du har skapat som din.exe - eller .dll-fil förlitar sig på, bitmappsfiler eller Readme-filer.

  • En sammansättningsreferenslista, som är en lista över alla externa beroenden, till exempel .dlleller andra filer. Sammansättningsreferenser innehåller referenser till både globala och privata objekt. Globala objekt är tillgängliga för alla andra program. I .NET Core kombineras globala objekt med en viss .NET Core-körning. I .NET Framework finns globala objekt i den globala sammansättningscache (GAC). System.IO.dll är ett exempel på en sammansättning i GAC. Privata objekt måste finnas i en katalognivå på eller under katalogen där appen är installerad.

Sammansättningar innehåller information om innehåll, versionshantering och beroenden. De program som använder dem behöver därför inte förlita sig på externa källor, till exempel registret på Windows-system, för att fungera korrekt. Sammansättningar minskar .dll konflikter och gör dina program mer tillförlitliga och enklare att distribuera. I många fall kan du installera en . NET-baserat program genom att helt enkelt kopiera sina filer till måldatorn. Mer information finns i Sammansättningsmanifest.

Lägga till en referens till en sammansättning

Om du vill använda en sammansättning i ett program måste du lägga till en referens till den. När en sammansättning refereras är alla tillgängliga typer, egenskaper, metoder och andra medlemmar i dess namnområden tillgängliga för ditt program som om deras kod var en del av källfilen.

Anmärkning

De flesta sammansättningar från .NET-klassbiblioteket refereras automatiskt. Om en systemsammansättning inte refereras automatiskt lägger du till en referens på något av följande sätt:

  • För .NET och .NET Core lägger du till en referens till NuGet-paketet som innehåller sammansättningen. Använd Antingen NuGet Package Manager i Visual Studio eller lägg till ett <PackageReference-element> för sammansättningen i projektet .csproj eller .vbproj .
  • För .NET Framework lägger du till en referens till sammansättningen med hjälp av dialogrutan Lägg till referens i Visual Studio eller kommandoradsalternativet -reference för C# - eller Visual Basic-kompilatorerna .

I C# kan du använda två versioner av samma sammansättning i ett enda program. Mer information finns i externt alias.

Titel Beskrivning
Sammansättningsinnehåll Element som utgör en sammansättning.
Sammansättningsmanifest Data i sammansättningsmanifestet och hur de lagras i sammansättningar.
Global sammansättningscache Hur GAC lagrar och använder sammansättningar.
Starka namngivna sammansättningar Egenskaper för starka namngivna sammansättningar.
Säkerhetsöverväganden för Assembly Hur säkerhet fungerar med sammansättningar.
Versionshantering av komponenter Översikt över versionsprincipen för .NET Framework.
Placering av sammansättning Var man hittar sammansättningar.
Sammansättningar och körning sida vid sida Använd flera versioner av körmiljön eller en samling samtidigt.
Generera dynamiska metoder och sammansättningar Så här skapar du dynamiska sammansättningar.
Hur körmiljön hittar assemblys Så här värderar .NET Framework assemblyreferenser i körning.

Hänvisning

System.Reflection.Assembly

Se även