Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Metodo AssemblyName.SetPublicKeyToken (Byte[])

 

Data di pubblicazione: ottobre 2016

Imposta il token di chiave pubblica, che corrisponde agli ultimi 8 byte dell'hash SHA-1 della chiave pubblica utilizzata per firmare l'assembly.

Spazio dei nomi:   System.Reflection
Assembly:  mscorlib (in mscorlib.dll)

public void SetPublicKeyToken(
	byte[] publicKeyToken
)

Parametri

publicKeyToken
Type: System.Byte[]

Matrice di byte contenente il token di chiave pubblica dell'assembly.

Quando si imposta la chiave pubblica mediante la chiamata di SetPublicKey (metodo), è necessario utilizzare anche il SetPublicKeyToken metodo per fornire un token di chiave pubblica. In caso contrario, un SecurityException viene generata quando il GetPublicKey viene chiamato il metodo.

Nell'esempio seguente viene generato un assembly dinamico e lo salva nella directory corrente. Quando viene creato l'assembly, il SetPublicKeyToken metodo viene utilizzato per impostare i token di chiave pubblica dell'assembly. Il GetPublicKeyToken metodo viene quindi utilizzato per recuperare il token di chiave pubblica, viene visualizzato nella console.

using System;
using System.Reflection;
using System.Threading;
using System.IO;
using System.Globalization;
using System.Reflection.Emit;
using System.Configuration.Assemblies;
using System.Text;

public class AssemblyName_CodeBase
{
   public static void MakeAssembly(AssemblyName myAssemblyName, string fileName)
   {
      // Get the assembly builder from the application domain associated with the current thread.
      AssemblyBuilder myAssemblyBuilder = Thread.GetDomain().DefineDynamicAssembly(myAssemblyName, AssemblyBuilderAccess.RunAndSave);
      // Create a dynamic module in the assembly.
      ModuleBuilder myModuleBuilder = myAssemblyBuilder.DefineDynamicModule("MyModule", fileName);
      // Create a type in the module.
      TypeBuilder myTypeBuilder = myModuleBuilder.DefineType("MyType");
      // Create a method called 'Main'.
      MethodBuilder myMethodBuilder = myTypeBuilder.DefineMethod("Main", MethodAttributes.Public | MethodAttributes.HideBySig |
         MethodAttributes.Static, typeof(void), null);
      // Get the Intermediate Language generator for the method.
      ILGenerator myILGenerator = myMethodBuilder.GetILGenerator();
      // Use the utility method to generate the IL instructions that print a string to the console.
      myILGenerator.EmitWriteLine("Hello World!");
      // Generate the 'ret' IL instruction.
      myILGenerator.Emit(OpCodes.Ret);
      // End the creation of the type.
      myTypeBuilder.CreateType();
      // Set the method with name 'Main' as the entry point in the assembly.
      myAssemblyBuilder.SetEntryPoint(myMethodBuilder);
      myAssemblyBuilder.Save(fileName);
   }

   public static void Main()
   {
      // Create a dynamic assembly with name 'MyAssembly' and build version '1.0.0.2001'.
      AssemblyName myAssemblyName = new AssemblyName();
      // Set the codebase to the physical directory were the assembly resides.
      myAssemblyName.CodeBase = Directory.GetCurrentDirectory();
      // Set the culture information of the assembly to 'English-American'.
      myAssemblyName.CultureInfo = new CultureInfo("en-US");
      // Set the hash algoritm to 'SHA1'.
      myAssemblyName.HashAlgorithm = AssemblyHashAlgorithm.SHA1;
      myAssemblyName.VersionCompatibility = AssemblyVersionCompatibility.SameProcess;
      myAssemblyName.Flags = AssemblyNameFlags.PublicKey;
      // Get the whole contents of the 'PublicKey.snk' into a byte array.
      FileStream publicKeyStream = File.Open("PublicKey.snk", FileMode.Open);
      byte[] publicKey = new byte[publicKeyStream.Length];
      publicKeyStream.Read(publicKey, 0, (int)publicKeyStream.Length);
      // Provide the assembly with a public key.
      myAssemblyName.SetPublicKey(publicKey);
      // Get the whole contents of the 'PublicKeyToken.snk' into a byte array.
      FileStream publicKeyTokenStream = File.Open("PublicKeyToken.snk", FileMode.Open);
      byte[] publicKeyToken = new Byte[publicKeyTokenStream.Length];
      publicKeyTokenStream.Read(publicKeyToken, 0, (int)publicKeyToken.Length);
      // Provide the assembly with a public key token.
      myAssemblyName.SetPublicKeyToken(publicKeyToken);
      myAssemblyName.Name = "MyAssembly";
      myAssemblyName.Version = new Version("1.0.0.2001");
      MakeAssembly(myAssemblyName, "MyAssembly.exe");

      // Get the assemblies loaded in the current application domain.
      Assembly[] myAssemblies = Thread.GetDomain().GetAssemblies();

      // Get the dynamic assembly named 'MyAssembly'. 
      Assembly myAssembly = null;
      for(int i = 0; i < myAssemblies.Length; i++)
         if(String.Compare(myAssemblies[i].GetName().Name, "MyAssembly") == 0)
            myAssembly = myAssemblies[i];

      // Display the full assembly information to the console.
      if(myAssembly != null)
      {
         Console.WriteLine("\nDisplaying the full assembly name\n");
         string assemblyName = myAssembly.GetName().FullName;
         Console.WriteLine(assemblyName);
         Console.WriteLine("\nDisplaying the public key for the assembly\n");
         byte[] publicKeyBytes = myAssembly.GetName().GetPublicKey();
         Console.WriteLine(Encoding.ASCII.GetString(publicKeyBytes));
         Console.WriteLine("\nDisplaying the public key token for the assembly\n");
         byte[] publicKeyTokenBytes = myAssembly.GetName().GetPublicKeyToken();
         Console.WriteLine(Encoding.ASCII.GetString(publicKeyTokenBytes));
      }
   }
}

Universal Windows Platform
Disponibile da 8
.NET Framework
Disponibile da 1.1
Libreria di classi portabile
Supportato in: piattaforme .NET portabili
Silverlight
Disponibile da 2.0
Windows Phone Silverlight
Disponibile da 7.0
Windows Phone
Disponibile da 8.1
Torna all'inizio
Mostra: