Firma ritardata di un assemblyDelay-sign an assembly

Un'organizzazione può avere una coppia di chiavi strettamente sorvegliata a cui gli sviluppatori non possono accedere su base giornaliera.An organization can have a closely guarded key pair that developers can't access on a daily basis. La chiave pubblica è spesso disponibile, ma l'accesso alla chiave privata è consentito solo ad alcune persone.The public key is often available, but access to the private key is restricted to only a few individuals. Quando si sviluppano assembly con nome sicuro, in ogni assembly che fa riferimento all'assembly con nome sicuro di destinazione è contenuto un token della chiave pubblica usata per assegnare un nome sicuro all'assembly di destinazione.When developing assemblies with strong names, each assembly that references the strong-named target assembly contains the token of the public key used to give the target assembly a strong name. È quindi necessario che la chiave pubblica risulti disponibile durante il processo di sviluppo.This requires that the public key be available during the development process.

È possibile usare la firma ritardata o parziale in fase di compilazione per riservare spazio nel file eseguibile portabile (PE) per la firma con nome sicuro, ma rinviare la firma effettiva fino a una fase successiva, in genere immediatamente prima di distribuire l'assembly.You can use delayed or partial signing at build time to reserve space in the portable executable (PE) file for the strong name signature, but defer the actual signing until some later stage, usually just before shipping the assembly.

Per ritardare la firma di un assembly:To delay-sign an assembly:

  1. Ottenere la parte della chiave pubblica della coppia di chiavi dall'organizzazione che effettuerà la firma finale.Get the public key portion of the key pair from the organization that will do the eventual signing. In genere, questa chiave è nel formato di un file con estensione snk , che può essere creato usando lo strumento nome sicuro (sn. exe) fornito dal Windows SDK.Typically this key is in the form of an .snk file, which can be created using the Strong Name tool (Sn.exe) provided by the Windows SDK.

  2. Apporre annotazioni al codice sorgente per l'assembly usando due attributi personalizzati da System.Reflection:Annotate the source code for the assembly with two custom attributes from System.Reflection:

    • AssemblyKeyFileAttribute, che consente di passare il nome del file contenente la chiave pubblica come parametro al costruttore.AssemblyKeyFileAttribute, which passes the name of the file containing the public key as a parameter to its constructor.

    • AssemblyDelaySignAttribute, che indica che si sta usando il ritardo della firma passando true come parametro al costruttore.AssemblyDelaySignAttribute, which indicates that delay signing is being used by passing true as a parameter to its constructor.

    Esempio:For example:

    [assembly:AssemblyKeyFileAttribute("myKey.snk")];
    [assembly:AssemblyDelaySignAttribute(true)];
    
    [assembly:AssemblyKeyFileAttribute("myKey.snk")]
    [assembly:AssemblyDelaySignAttribute(true)]
    
    <Assembly:AssemblyKeyFileAttribute("myKey.snk")>
    <Assembly:AssemblyDelaySignAttribute(True)>
    
  3. Il compilatore inserisce la chiave pubblica nel manifesto dell'assembly e riserva nel file PE lo spazio necessario per la firma completa con nome sicuro.The compiler inserts the public key into the assembly manifest and reserves space in the PE file for the full strong name signature. La chiave pubblica reale deve essere memorizzata in fase di compilazione dell'assembly, in modo che gli altri assembly contenenti riferimenti a questo assembly siano in grado di ottenere la chiave da memorizzare nei relativi riferimenti di assembly.The real public key must be stored while the assembly is built so that other assemblies that reference this assembly can obtain the key to store in their own assembly reference.

  4. Poiché l'assembly non dispone di una firma con nome sicuro valida, è necessario disattivare la verifica della firma di tale assembly.Because the assembly does not have a valid strong name signature, the verification of that signature must be turned off. A tale scopo, usare l'opzione -Vr dello strumento Nome sicuro.You can do this by using the –Vr option with the Strong Name tool.

    Nell'esempio seguente viene disattivata la verifica per un assembly denominato myAssembly. dll.The following example turns off verification for an assembly called myAssembly.dll.

    sn –Vr myAssembly.dll
    

    Per disattivare la verifica delle piattaforme in cui non è possibile eseguire lo strumento Nome sicuro, come microprocessori avanzati del computer RISC (ARM), usare l'opzione -Vk per creare un file del Registro di sistema.To turn off verification on platforms where you can’t run the Strong Name tool, such as Advanced RISC Machine (ARM) microprocessors, use the –Vk option to create a registry file. Importare il file del Registro di sistema nel Registro di sistema del computer in cui si vuole disattivare la verifica.Import the registry file into the registry on the computer where you want to turn off verification. L'esempio seguente consente di creare un file del Registro di sistema per myAssembly.dll.The following example creates a registry file for myAssembly.dll.

    sn –Vk myRegFile.reg myAssembly.dll
    

    Con l'opzione – VR o – VK , è possibile includere facoltativamente un file con estensione snk per la firma della chiave di test.With either the –Vr or –Vk option, you can optionally include an .snk file for test key signing.

    Avviso

    Non usare i nomi sicuri per la sicurezza,Do not rely on strong names for security. poiché forniscono solo un'identità univoca.They provide a unique identity only.

    Nota

    Se si usa il ritardo della firma durante lo sviluppo con Visual Studio in un computer a 64 bit e si compila un assembly per Qualsiasi CPU, potrebbe essere necessario applicare due volte l'opzione -Vr.If you use delay signing during development with Visual Studio on a 64-bit computer, and you compile an assembly for Any CPU, you might have to apply the -Vr option twice. In Visual Studio qualsiasi CPU è un valore della proprietà di compilazione di destinazione della piattaforma . quando si esegue la compilazione dalla riga di comando, si tratta dell'impostazione predefinita. Per eseguire l'applicazione dalla riga di comando o da Esplora file, usare la versione a 64 bit di sn. exe (strumento nome sicuro) per applicare l'opzione -VR all'assembly.(In Visual Studio, Any CPU is a value of the Platform Target build property; when you compile from the command line, it is the default.) To run your application from the command line or from File Explorer, use the 64-bit version of the Sn.exe (Strong Name tool) to apply the -Vr option to the assembly. Per caricare l'assembly in Visual Studio in fase di progettazione, ad esempio se l'assembly contiene componenti usati da altri assembly nell'applicazione, usare la versione a 32 bit dello strumento Nome sicuro.To load the assembly into Visual Studio at design time (for example, if the assembly contains components that are used by other assemblies in your application), use the 32-bit version of the strong-name tool. Questo perché il compilatore JIT compila l'assembly nel codice nativo a 64 bit quando l'assembly viene eseguito dalla riga di comando e nel codice nativo a 32 bit quando l'assembly viene caricato nell'ambiente di progettazione.This is because the just-in-time (JIT) compiler compiles the assembly to 64-bit native code when the assembly is run from the command line, and to 32-bit native code when the assembly is loaded into the design-time environment.

  5. Successivamente, di solito prima della consegna, sottoporre l'assembly all'autorità di firma dell'organizzazione per la firma con nome sicuro effettiva tramite l'opzione -R dello strumento Nome sicuro.Later, usually just before shipping, you submit the assembly to your organization's signing authority for the actual strong name signing using the –R option with the Strong Name tool.

    Nell'esempio seguente viene firmato un assembly denominato MyAssembly . dll con un nome sicuro utilizzando la coppia di chiavi sgKey. snk .The following example signs an assembly called myAssembly.dll with a strong name using the sgKey.snk key pair.

    sn -R myAssembly.dll sgKey.snk
    

Vedere ancheSee also