This documentation is archived and is not being maintained.

AssemblyName.KeyPair Property

Gets or sets the public and private cryptographic key pair generated by the public key or public key token of the assembly.

[Visual Basic]
Public Property KeyPair As StrongNameKeyPair
[C#]
public StrongNameKeyPair KeyPair {get; set;}
[C++]
public: __property StrongNameKeyPair* get_KeyPair();
public: __property void set_KeyPair(StrongNameKeyPair*);
[JScript]
public function get KeyPair() : StrongNameKeyPair;
public function set KeyPair(StrongNameKeyPair);

Property Value

A StrongNameKeyPair object containing the public and private cryptographic key pair generated by the public key or public key token of the assembly.

Remarks

When the runtime loads an assembly, it does not set the AssemblyName.KeyPair property. The getter for the property is only useful if the user set the property after the assembly was loaded and wants to subsequently retrieve the property.

Example

[Visual Basic] 
Imports System
Imports System.Reflection
Imports System.Threading
Imports System.IO
Imports System.Globalization
Imports System.Reflection.Emit
Imports System.Configuration.Assemblies
Imports System.Text
Imports Microsoft.VisualBasic


Public Class AssemblyName_CodeBase
   
   Public Shared Sub MakeAssembly(myAssemblyName As AssemblyName, fileName As String)
      ' Get the assembly builder from the application domain associated with the current thread.
      Dim myAssemblyBuilder As AssemblyBuilder = Thread.GetDomain().DefineDynamicAssembly(myAssemblyName, AssemblyBuilderAccess.RunAndSave)
      ' Create a dynamic module in the assembly.
      Dim myModuleBuilder As ModuleBuilder = myAssemblyBuilder.DefineDynamicModule("MyModule", fileName)
      ' Create a type in the module.
      Dim myTypeBuilder As TypeBuilder = myModuleBuilder.DefineType("MyType")
      ' Create a method called 'Main'.
      Dim myMethodBuilder As MethodBuilder = myTypeBuilder.DefineMethod("Main", MethodAttributes.Public Or MethodAttributes.HideBySig Or MethodAttributes.Static, GetType(object), Nothing)
      ' Get the Intermediate Language generator for the method.
      Dim myILGenerator As ILGenerator = 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)
   End Sub 'MakeAssembly
   
   
   Public Shared Sub Main()
      

      ' Create a dynamic assembly with name 'MyAssembly' and build version '1.0.0.2001'.
      Dim myAssemblyName As New AssemblyName()
      ' Set the codebase to the physical directory were the assembly resides.
      myAssemblyName.CodeBase = [String].Concat("file:///", 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
      ' Provide this assembly with a strong name.
      myAssemblyName.KeyPair = New StrongNameKeyPair(File.Open("KeyPair.snk", FileMode.Open, FileAccess.Read))
      myAssemblyName.Name = "MyAssembly"
      myAssemblyName.Version = New Version("1.0.0.2001")
      MakeAssembly(myAssemblyName, "MyAssembly.exe")
      
      ' Get the assemblies loaded in the current application domain.
      Dim myAssemblies As [Assembly]() = Thread.GetDomain().GetAssemblies()
      
      ' Get the dynamic assembly named 'MyAssembly'. 
      Dim myAssembly As [Assembly] = Nothing
      Dim i As Integer
      For i = 0 To myAssemblies.Length - 1
         If [String].Compare(myAssemblies(i).GetName().Name, "MyAssembly") = 0 Then
            myAssembly = myAssemblies(i)
         End If 
      Next i ' Display the full assembly information to the console.
      If Not (myAssembly Is Nothing) Then
      Console.WriteLine(ControlChars.CrLf +"Displaying the full assembly name."+ ControlChars.CrLf)
      Console.WriteLine(myAssembly.GetName().FullName)
      Console.WriteLine(ControlChars.CrLf +"Displaying the public key." + ControlChars.CrLf)
      Dim pk() As Byte
      pk = myAssembly.GetName().GetPublicKey()
      For i = 0 To (pk.GetLength(0)) - 1
         Console.Write("{0:x}", pk(i))
      Next i
      Console.WriteLine()
      Console.WriteLine(ControlChars.CrLf +"Displaying the public key token."+ ControlChars.CrLf)
      Dim pt() As Byte
      pt = myAssembly.GetName().GetPublicKeyToken()
      For i = 0 To (pt.GetLength(0)) - 1
         Console.Write("{0:x}", pt(i))
      Next i
      End If
   End Sub 'Main 
End Class 'AssemblyName_CodeBase 

[C#] 

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 = String.Concat("file:///", 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;
      // Provide this assembly with a strong name.
      myAssemblyName.KeyPair = new StrongNameKeyPair(File.Open("KeyPair.snk", FileMode.Open, FileAccess.Read));
      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");
         Console.WriteLine(myAssembly.GetName().FullName);
         Console.WriteLine("\nDisplaying the public key.\n");
         byte []pk;
         pk = myAssembly.GetName().GetPublicKey();
      for (int i=0;i<pk.GetLength(0);i++)
         Console.Write ("{0:x}", pk[i]);
         Console.WriteLine();
         Console.WriteLine("\nDisplaying the public key token.\n");
         byte []pt;
         pt = myAssembly.GetName().GetPublicKeyToken();
      for (int i=0;i<pt.GetLength(0);i++)
         Console.Write ("{0:x}", pt[i]);
      }
   }
}

[C++] 

#using <mscorlib.dll>

using namespace System;
using namespace System::Reflection;
using namespace System::Threading;
using namespace System::IO;
using namespace System::Globalization;
using namespace System::Reflection::Emit;
using namespace System::Configuration::Assemblies;
using namespace System::Text;

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(S"MyModule", fileName);
   // Create a type in the module.
   TypeBuilder* myTypeBuilder = myModuleBuilder->DefineType(S"MyType");
   // Create a method called 'Main'.
   MethodBuilder* myMethodBuilder = myTypeBuilder->DefineMethod(S"Main",
      static_cast<MethodAttributes>( MethodAttributes::Public | MethodAttributes::HideBySig | MethodAttributes::Static ),
      __typeof(void), 0);
   // 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(S"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);
}

int 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 = String::Concat(S"file:///", Directory::GetCurrentDirectory());
   // Set the culture information of the assembly to 'English-American'.
   myAssemblyName->CultureInfo = new CultureInfo(S"en-US");
   // Set the hash algoritm to 'SHA1'.
   myAssemblyName->HashAlgorithm = AssemblyHashAlgorithm::SHA1;
   myAssemblyName->VersionCompatibility = AssemblyVersionCompatibility::SameProcess;
   myAssemblyName->Flags = AssemblyNameFlags::PublicKey;
   // Provide this assembly with a strong name.
   myAssemblyName->KeyPair = new StrongNameKeyPair(File::Open(S"KeyPair.snk", FileMode::Open, FileAccess::Read));
   myAssemblyName->Name = S"MyAssembly";
   myAssemblyName->Version = new Version(S"1.0.0.2001");
   MakeAssembly(myAssemblyName, S"MyAssembly.exe");

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

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

   // Display the full assembly information to the console.
   if (myAssembly != 0) {
      Console::WriteLine(S"\nDisplaying the full assembly name.\n");
      Console::WriteLine(myAssembly->GetName()->FullName);
      Console::WriteLine(S"\nDisplaying the public key.\n");
      Byte pk[];
      pk = myAssembly->GetName()->GetPublicKey();
      for (int i=0;i<pk->GetLength(0);i++)
         Console::Write (S" {0:x}", pk->Item[i]);
      Console::WriteLine();
      Console::WriteLine(S"\nDisplaying the public key token.\n");
      Byte pt[];
      pt = myAssembly->GetName()->GetPublicKeyToken();
      for (int i=0;i<pt->GetLength(0);i++)
         Console::Write (" {0:x}", pt->Item[i]);
   }
}

[JScript] No example is available for JScript. To view a Visual Basic, C#, or C++ example, click the Language Filter button Language Filter in the upper-left corner of the page.

Requirements

Platforms: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 family

See Also

AssemblyName Class | AssemblyName Members | System.Reflection Namespace

Show: