AssemblyName::GetPublicKey Method ()


Gets the public key of the assembly.

Namespace:   System.Reflection
Assembly:  mscorlib (in mscorlib.dll)

array<unsigned char>^ GetPublicKey()

Return Value

Type: array<System::Byte>^

A byte array that contains the public key of the assembly.

Exception Condition

A public key was provided (for example, by using the SetPublicKey method), but no public key token was provided.

The following example emits a dynamic assembly and saves it to the current directory. When the assembly is created, the SetPublicKey method is used to give the assembly a public key. The GetPublicKey method is then used to retrieve the public key, which is displayed to the console.

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( "MyModule", fileName );

   // Create a type in the module.
   TypeBuilder^ myTypeBuilder = myModuleBuilder->DefineType( "MyType" );

   // Create a method called 'Main'.
   MethodBuilder^ myMethodBuilder = myTypeBuilder->DefineMethod( "Main", static_cast<MethodAttributes>(MethodAttributes::Public | MethodAttributes::HideBySig | MethodAttributes::Static), void::typeid, nullptr );

   // 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.

   // 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 ''.
   AssemblyName^ myAssemblyName = gcnew 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 = gcnew 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 = gcnew StrongNameKeyPair( File::Open( "KeyPair.snk", FileMode::Open, FileAccess::Read ) );
   myAssemblyName->Name = "MyAssembly";
   myAssemblyName->Version = gcnew Version( "" );
   MakeAssembly( myAssemblyName, "MyAssembly.exe" );

   // Get the assemblies loaded in the current application domain.
   array<Assembly^>^myAssemblies = Thread::GetDomain()->GetAssemblies();

   // Get the dynamic assembly named 'MyAssembly'. 
   Assembly^ myAssembly = nullptr;
   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 != nullptr )
      Console::WriteLine( "\nDisplaying the full assembly name.\n" );
      Console::WriteLine( myAssembly->GetName()->FullName );
      Console::WriteLine( "\nDisplaying the public key.\n" );
      pk = myAssembly->GetName()->GetPublicKey();
      for ( int i = 0; i < pk->GetLength( 0 ); i++ )
         Console::Write( " {0:x2}", pk[ i ] );
      Console::WriteLine( "\nDisplaying the public key token.\n" );
      pt = myAssembly->GetName()->GetPublicKeyToken();
      for ( int i = 0; i < pt->GetLength( 0 ); i++ )
         Console::Write(  " {0:x2}", pt[ i ] );

Universal Windows Platform
Available since 8
.NET Framework
Available since 1.1
Portable Class Library
Supported in: portable .NET platforms
Available since 2.0
Windows Phone Silverlight
Available since 7.0
Windows Phone
Available since 8.1
Return to top