Dela via


Anvisningar: Signera en sammansättning med ett starkt namn

Kommentar

Även om .NET Core stöder starkt namngivna sammansättningar och alla sammansättningar i .NET Core-biblioteket är signerade, behöver majoriteten av tredjepartssammansättningar inte starka namn. Mer information finns i Strong Name Signing på GitHub.

Det finns ett antal sätt att signera en sammansättning med ett starkt namn:

  • Genom att använda sidan Skapa>stark namngivning i projektdesignern för ett projekt i Visual Studio. Det här är det enklaste och enklaste sättet att signera en sammansättning med ett starkt namn.
  • Genom att använda Assembly Linker (Al.exe) för att länka en .NET Framework-kodmodul (en .netmodule-fil ) med en nyckelfil.
  • Genom att använda sammansättningsattribut för att infoga stark namninformation i koden. Du kan använda attributet AssemblyKeyFileAttribute eller AssemblyKeyNameAttribute beroende på var nyckelfilen som ska användas finns.
  • Med hjälp av kompilatoralternativ.

Du måste ha ett kryptografiskt nyckelpar för att signera en sammansättning med ett starkt namn. Mer information om hur du skapar ett nyckelpar finns i Så här skapar du ett offentligt-privat nyckelpar.

Skapa och signera en sammansättning med ett starkt namn med hjälp av Visual Studio

  1. Öppna snabbmenyn för projektet i Solution Explorer och välj sedan Egenskaper.
  2. Under fliken Skapa hittar du en nod för stark namngivning .
  3. Markera kryssrutan Signera sammansättningen , som expanderar alternativen.
  4. Välj knappen Bläddra för att välja filsökvägen Stark namnnyckel.

Kommentar

Om du vill fördröja tecknet för en sammansättning väljer du en offentlig nyckelfil.

Visual Studio 2022: Projektegenskaper, Avsnittet Skapa/Stark namngivning.

Skapa och signera en sammansättning med ett starkt namn med hjälp av Assembly Linker

Öppna Visual Studio Developer Command Prompt eller Visual Studio Developer PowerShell och ange följande kommando:

al /out:<assemblyName><moduleName> /keyfile:<keyfileName >

Där:

  • assemblyName är namnet på den starkt signerade sammansättningen (en .dll eller .exe fil) som Assembly Linker genererar.
  • moduleName är namnet på en .NET Framework-kodmodul (en .netmodule-fil ) som innehåller en eller flera typer. Du kan skapa en .netmodule-fil genom att kompilera koden med växeln /target:module i C# eller Visual Basic.
  • keyfileName är namnet på den container eller fil som innehåller nyckelparet. Assembly Linker tolkar en relativ sökväg i förhållande till den aktuella katalogen.

I följande exempel signeras sammansättningen MyAssembly.dll med ett starkt namn med hjälp av nyckelfilen sgKey.snk.

al /out:MyAssembly.dll MyModule.netmodule /keyfile:sgKey.snk

Mer information om det här verktyget finns i Assembly Linker.

Signera en sammansättning med ett starkt namn med hjälp av attribut

  1. System.Reflection.AssemblyKeyFileAttribute Lägg till attributet eller AssemblyKeyNameAttribute i källkodsfilen och ange namnet på filen eller containern som innehåller nyckelparet som ska användas när sammansättningen signeras med ett starkt namn.

  2. Kompilera källkodsfilen normalt.

    Kommentar

    Kompilatorerna C# och Visual Basic utfärdar kompilatorvarningar (CS1699 respektive BC41008) när de stöter på attributet eller AssemblyKeyNameAttribute i källkodenAssemblyKeyFileAttribute. Du kan ignorera varningarna.

I följande exempel används AssemblyKeyFileAttribute attributet med en nyckelfil med namnet keyfile.snk, som finns i katalogen där sammansättningen kompileras.

[assembly:AssemblyKeyFileAttribute("keyfile.snk")];
[assembly:AssemblyKeyFileAttribute("keyfile.snk")]
<Assembly:AssemblyKeyFileAttribute("keyfile.snk")>

Du kan också fördröja tecknet på en sammansättning när du kompilerar källfilen. Mer information finns i Fördröj signera en sammansättning.

Signera en sammansättning med ett starkt namn med hjälp av kompilatorn

Kompilera källkodsfilen eller filerna med kompilatoralternativet /keyfile eller /delaysign i C# och Visual Basic, eller /KEYFILE alternativet eller /DELAYSIGN länkare i C++. Efter alternativnamnet lägger du till ett kolon och namnet på nyckelfilen. När du använder kommandoradskompilerare kan du kopiera nyckelfilen till katalogen som innehåller dina källkodsfiler.

Information om fördröjningssignering finns i Fördröj signera en sammansättning.

I följande exempel används C#-kompilatorn och sammansättningen signeras UtilityLibrary.dll med ett starkt namn med hjälp av nyckelfilen sgKey.snk.

csc /t:library UtilityLibrary.cs /keyfile:sgKey.snk

Se även