Partager via


Comment : utiliser une signature complète pour donner un nom fort à un assembly dynamique

Un nom fort peut être attribué à un assembly dynamique en utilisant une signature partielle ou une signature complète. Pour la signature partielle, la clé publique doit être spécifiée dans AssemblyName passé à la méthode DefineDynamicAssembly. Le Common Language Runtime alloue de l'espace dans le fichier exécutable portable (PE, Portable Executable) pour un objet binaire volumineux (BLOB) de signature de nom fort, mais ne signe pas réellement l'assembly. L'assembly résultant peut être complètement signé au cours d'une étape de post-traitement en utilisant les outils fournis dans le Kit de développement logiciel (SDK) Windows.

Pour une signature complète, une paire de clés publiques/privées doit être fournie. Ces entités sont généralement stockées dans un fichier, sur un disque ou dans un conteneur de clé appartenant à un fournisseur de services de chiffrement (CSP, Cryptographic Service Provider) CryptoAPI. Les clés à basse sécurité sont souvent générées par des CSP logiciels et exportées dans un fichier pour pouvoir être archivées dans les systèmes de gestion de code source au cours du développement d'un projet. Les clés à haute sécurité sont souvent générées par le matériel, ce qui empêche généralement leur exportation pour des raisons de sécurité. De telles paires de clés sont uniquement accessibles indirectement via un conteneur de clé. La paire de clés de nom fort est spécifiée en utilisant la classe System.Reflection.StrongNameKeyPair.

L'exemple suivant montre comment utiliser une signature complète pour donner un nom fort à un assembly dynamique.

Exemple

Imports System
Imports System.IO
Imports System.Threading
Imports System.Reflection
Imports System.Reflection.Emit

Class SNKToAssembly
    Public Shared Sub Main()
        Dim fs As New FileStream("SomeKeyPair.snk", FileMode.Open)
        Dim kp As New StrongNameKeyPair(fs)
        fs.Close()
        Dim an As new AssemblyName()
        an.KeyPair = kp
        Dim appDomain As AppDomain = Thread.GetDomain()
        Dim ab As AssemblyBuilder = _
            appDomain.DefineDynamicAssembly(an, AssemblyBuilderAccess.RunAndSave)
    End Sub
End Class
' Construct a StrongNameKeyPair object. This object should obtain 
' the public key from the Company.keys file.
Dim k As Reflection.StrongNameKeyPair = _
    New Reflection.StrongNameKeyPair(fs)
using System;
using System.IO;
using System.Threading;
using System.Reflection;
using System.Reflection.Emit;

class SNKToAssembly
{
    public static void Main()
    {
        FileStream fs = new FileStream("SomeKeyPair.snk", FileMode.Open);
        StrongNameKeyPair kp = new StrongNameKeyPair(fs);
        fs.Close();
        AssemblyName an = new AssemblyName();
        an.KeyPair = kp;
        AppDomain appDomain = Thread.GetDomain();
        AssemblyBuilder ab = appDomain.DefineDynamicAssembly(an, AssemblyBuilderAccess.RunAndSave);
    }
}
// Construct a StrongNameKeyPair object. This object should obtain
// the public key from the Company.keys file.
StrongNameKeyPair k = new StrongNameKeyPair(fs);
using namespace System;
using namespace System::IO;
using namespace System::Threading;
using namespace System::Reflection;
using namespace System::Reflection::Emit;

ref class SNKToAssembly
{
public:
    static void Main()
    {
        FileStream^ fs = gcnew FileStream("SomeKeyPair.snk", FileMode::Open);
        StrongNameKeyPair^ kp = gcnew StrongNameKeyPair(fs);
        fs->Close();
        AssemblyName^ an = gcnew AssemblyName();
        an->KeyPair = kp;
        AppDomain^ appDomain = Thread::GetDomain();
        AssemblyBuilder^ ab = appDomain->DefineDynamicAssembly(an, AssemblyBuilderAccess::RunAndSave);
    }
};

int main()
{
   SNKToAssembly::Main();
}
// Construct a StrongNameKeyPair object. This object should obtain
// the public key from the Company.keys file.
StrongNameKeyPair^ k = gcnew StrongNameKeyPair(fs);

Voir aussi

Concepts

Assemblys avec nom fort

Création et utilisation d'assemblys avec nom fort

Autres ressources

Utilisation de Émission de réflexion