Delen via


Een assembly uitstellen

Een organisatie kan een nauw bewaakt sleutelpaar hebben waartoe ontwikkelaars dagelijks geen toegang hebben. De openbare sleutel is vaak beschikbaar, maar de toegang tot de persoonlijke sleutel is beperkt tot slechts enkele personen. Bij het ontwikkelen van assembly's met sterke namen bevat elke assembly die verwijst naar de sterk benoemde doelassembly het token van de openbare sleutel die wordt gebruikt om de doelassembly een sterke naam te geven. Hiervoor moet de openbare sleutel beschikbaar zijn tijdens het ontwikkelingsproces.

U kunt vertraagde of gedeeltelijke ondertekening tijdens de build gebruiken om ruimte te reserveren in het draagbare uitvoerbare bestand (PE) voor de sterke naamhandtekening, maar de daadwerkelijke ondertekening uitstellen tot een later stadium, meestal vlak voordat de assembly wordt verzonden.

Een assembly uitstellen:

  1. Haal het openbare sleutelgedeelte van het sleutelpaar op van de organisatie die uiteindelijk wordt ondertekend. Deze sleutel heeft meestal de vorm van een .snk-bestand , dat kan worden gemaakt met behulp van het hulpprogramma Strong Name (Sn.exe) dat wordt geleverd door de Windows SDK.

  2. Aantekeningen toevoegen aan de broncode voor de assembly met twee aangepaste kenmerken van System.Reflection:

    • AssemblyKeyFileAttribute, waarmee de naam van het bestand met de openbare sleutel als parameter wordt doorgegeven aan de constructor.

    • AssemblyDelaySignAttribute, wat aangeeft dat vertragingsondertekening wordt gebruikt door true door te geven als een parameter aan de constructor.

    Voorbeeld:

    [assembly:AssemblyKeyFileAttribute("myKey.snk")];
    [assembly:AssemblyDelaySignAttribute(true)];
    
    [assembly:AssemblyKeyFileAttribute("myKey.snk")]
    [assembly:AssemblyDelaySignAttribute(true)]
    
    <Assembly:AssemblyKeyFileAttribute("myKey.snk")>
    <Assembly:AssemblyDelaySignAttribute(True)>
    
  3. De compiler voegt de openbare sleutel in het assemblymanifest in en reserveert ruimte in het PE-bestand voor de volledige sterke naamhandtekening. De echte openbare sleutel moet worden opgeslagen terwijl de assembly wordt gebouwd, zodat andere assembly's die naar deze assembly verwijzen, de sleutel kunnen verkrijgen die in hun eigen assemblyreferentie moet worden opgeslagen.

  4. Omdat de assembly geen geldige sterke naamhandtekening heeft, moet de verificatie van die handtekening worden uitgeschakeld. U kunt dit doen met de optie -Vr met het hulpmiddel Sterke naam.

    In het volgende voorbeeld wordt verificatie uitgeschakeld voor een assembly met de naam myAssembly.dll.

    sn -Vr myAssembly.dll
    

    Als u verificatie wilt uitschakelen op platforms waarop u het hulpprogramma Strong Name niet kunt uitvoeren, zoals Advanced RISC Machine (ARM) microprocessors, gebruikt u de optie -Vk om een registerbestand te maken. Importeer het registerbestand in het register op de computer waarop u verificatie wilt uitschakelen. In het volgende voorbeeld wordt een registerbestand gemaakt voor myAssembly.dll.

    sn -Vk myRegFile.reg myAssembly.dll
    

    Met de optie -Vr of -Vk kunt u desgewenst een .snk-bestand opnemen voor het ondertekenen van de testsleutel.

    Waarschuwing

    Vertrouw niet op sterke namen voor beveiliging. Ze bieden alleen een unieke identiteit.

    Notitie

    Als u vertragingsondertekening gebruikt tijdens de ontwikkeling met Visual Studio op een 64-bits computer en u een assembly compileert voor elke CPU, moet u de optie -Vr mogelijk twee keer toepassen. (In Visual Studio, Elke CPU is een waarde van de build-eigenschap Platformdoel. Wanneer u compileert vanaf de opdrachtregel, is dit de standaardinstelling.) Als u uw toepassing vanaf de opdrachtregel of vanuit Bestandenverkenner wilt uitvoeren, gebruikt u de 64-bits versie van het Sn.exe (hulpprogramma Sterke naam) om de optie -Vr toe te passen op de assembly. Als u de assembly tijdens het ontwerp in Visual Studio wilt laden (bijvoorbeeld als de assembly onderdelen bevat die door andere assembly's in uw toepassing worden gebruikt), gebruikt u de 32-bits versie van het hulpprogramma voor sterke naam. Dit komt doordat de Just-In-Time-compiler (JIT) de assembly compileert naar 64-bits systeemeigen code wanneer de assembly wordt uitgevoerd vanaf de opdrachtregel en naar 32-bits systeemeigen code wanneer de assembly in de ontwerpomgeving wordt geladen.

  5. Later, meestal vlak voor verzending, verzendt u de assembly naar de ondertekeningsinstantie van uw organisatie voor de werkelijke sterke naamondertekening met behulp van de optie -R met het hulpmiddel Sterke naam.

    In het volgende voorbeeld wordt een assembly met de naam myAssembly.dll met een sterke naam ondertekend met behulp van het sleutelpaar sgKey.snk .

    sn -R myAssembly.dll sgKey.snk
    

Zie ook