AssemblyName.GetPublicKey Method
.NET Framework 1.1
Gets the public key of the assembly.
[Visual Basic] Public Function GetPublicKey() As Byte() [C#] public byte[] GetPublicKey(); [C++] public: unsigned char GetPublicKey() __gc[]; [JScript] public function GetPublicKey() : Byte[];
Return Value
An array of type byte containing the public key of the assembly.
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
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, .NET Compact Framework
See Also
AssemblyName Class | AssemblyName Members | System.Reflection Namespace