Fördröjningssignering av en sammansättning
En organisation kan ha ett nära skyddat nyckelpar som utvecklare inte kan komma åt dagligen. Den offentliga nyckeln är ofta tillgänglig, men åtkomsten till den privata nyckeln är begränsad till endast ett fåtal personer. När du utvecklar sammansättningar med starka namn innehåller varje sammansättning som refererar till den starkt namngivna målsammansättningen token för den offentliga nyckeln som används för att ge målsammansättningen ett starkt namn. Detta kräver att den offentliga nyckeln är tillgänglig under utvecklingsprocessen.
Du kan använda fördröjd eller partiell signering vid byggtiden för att reservera utrymme i den bärbara körbara filen (PE) för den starka namnsignaturen, men skjuta upp den faktiska signeringen till något senare skede, vanligtvis strax innan du skickar sammansättningen.
Så här fördröjer du en sammansättning:
Hämta den offentliga nyckeldelen av nyckelparet från organisationen som gör den slutliga signeringen. Vanligtvis är den här nyckeln i form av en .snk-fil som kan skapas med hjälp av verktyget Starkt namn (Sn.exe) som tillhandahålls av Windows SDK.
Kommentera källkoden för sammansättningen med två anpassade attribut från System.Reflection:
AssemblyKeyFileAttribute, som skickar namnet på filen som innehåller den offentliga nyckeln som en parameter till konstruktorn.
AssemblyDelaySignAttribute, vilket anger att fördröjningssignering används genom att true skickas som en parameter till konstruktorn.
Till exempel:
[assembly:AssemblyKeyFileAttribute("myKey.snk")]; [assembly:AssemblyDelaySignAttribute(true)];
[assembly:AssemblyKeyFileAttribute("myKey.snk")] [assembly:AssemblyDelaySignAttribute(true)]
<Assembly:AssemblyKeyFileAttribute("myKey.snk")> <Assembly:AssemblyDelaySignAttribute(True)>
Kompilatorn infogar den offentliga nyckeln i sammansättningsmanifestet och reserverar utrymme i PE-filen för den fullständiga starka namnsignaturen. Den verkliga offentliga nyckeln måste lagras medan sammansättningen skapas så att andra sammansättningar som refererar till den här sammansättningen kan hämta nyckeln som ska lagras i sin egen sammansättningsreferens.
Eftersom sammansättningen inte har en giltig signatur för starkt namn måste verifieringen av signaturen inaktiveras. Du kan göra detta med hjälp av alternativet -Vr med verktyget Starkt namn.
I följande exempel inaktiveras verifiering för en sammansättning med namnet myAssembly.dll.
sn -Vr myAssembly.dll
Om du vill inaktivera verifiering på plattformar där du inte kan köra verktyget Starkt namn, till exempel ARM-mikroprocessorer (Advanced RISC Machine), använder du alternativet -Vk för att skapa en registerfil. Importera registerfilen till registret på den dator där du vill inaktivera verifieringen. I följande exempel skapas en registerfil för
myAssembly.dll
.sn -Vk myRegFile.reg myAssembly.dll
Med alternativet -Vr eller -Vk kan du inkludera en .snk-fil för signering av testnyckel.
Varning
Förlita dig inte på starka namn för säkerhet. De ger endast en unik identitet.
Kommentar
Om du använder fördröjningssignering under utvecklingen med Visual Studio på en 64-bitars dator och kompilerar en sammansättning för Alla processorer, kan du behöva använda alternativet -Vr två gånger. (I Visual Studio Alla processorer är ett värde för byggeegenskapen Plattformsmål. När du kompilerar från kommandoraden är det standardvärdet.) Om du vill köra programmet från kommandoraden eller från Utforskaren använder du 64-bitarsversionen av Sn.exe (verktyget Starkt namn) för att tillämpa alternativet -Vr på sammansättningen. Om du vill läsa in sammansättningen i Visual Studio vid designtillfället (till exempel om sammansättningen innehåller komponenter som används av andra sammansättningar i ditt program) använder du 32-bitarsversionen av verktyget strong-name. Det beror på att jit-kompilatorn (just-in-time) kompilerar sammansättningen till 64-bitars intern kod när sammansättningen körs från kommandoraden och till 32-bitars intern kod när sammansättningen läses in i design-time-miljön.
Senare, vanligtvis strax före leverans, skickar du sammansättningen till organisationens signeringsutfärdande för den faktiska starka namnsigneringen med hjälp av alternativet -R med verktyget Starkt namn.
I följande exempel signeras en sammansättning med namnet myAssembly.dll med ett starkt namn med nyckelparet sgKey.snk .
sn -R myAssembly.dll sgKey.snk