AssemblyName.KeyPair Properti
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Perhatian
Strong name signing is not supported and throws PlatformNotSupportedException.
Mendapatkan atau mengatur pasangan kunci kriptografi publik dan privat yang digunakan untuk membuat tanda tangan nama yang kuat untuk perakitan.
public:
property System::Reflection::StrongNameKeyPair ^ KeyPair { System::Reflection::StrongNameKeyPair ^ get(); void set(System::Reflection::StrongNameKeyPair ^ value); };
public System.Reflection.StrongNameKeyPair? KeyPair { get; set; }
[System.Obsolete("Strong name signing is not supported and throws PlatformNotSupportedException.", DiagnosticId="SYSLIB0017", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public System.Reflection.StrongNameKeyPair? KeyPair { get; set; }
public System.Reflection.StrongNameKeyPair KeyPair { get; set; }
member this.KeyPair : System.Reflection.StrongNameKeyPair with get, set
[<System.Obsolete("Strong name signing is not supported and throws PlatformNotSupportedException.", DiagnosticId="SYSLIB0017", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
member this.KeyPair : System.Reflection.StrongNameKeyPair with get, set
Public Property KeyPair As StrongNameKeyPair
Nilai Properti
Pasangan kunci kriptografi publik dan privat yang akan digunakan untuk membuat nama yang kuat untuk perakitan.
- Atribut
Pengecualian
Hanya .NET 6+: Dalam semua kasus.
Contoh
Contoh berikut memancarkan rakitan dinamis dan menyimpannya ke direktori saat ini. Saat rakitan dibuat, KeyPair properti digunakan untuk mengatur kunci kriptografi publik dan privat perakitan.
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.
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 = 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 algorithm to 'SHA256'.
myAssemblyName->HashAlgorithm = AssemblyHashAlgorithm::SHA256;
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( "1.0.0.2001" );
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" );
array<Byte>^pk;
pk = myAssembly->GetName()->GetPublicKey();
for ( int i = 0; i < pk->GetLength( 0 ); i++ )
Console::Write( " {0:x2}", pk[ i ] );
Console::WriteLine();
Console::WriteLine( "\nDisplaying the public key token.\n" );
array<Byte>^pt;
pt = myAssembly->GetName()->GetPublicKeyToken();
for ( int i = 0; i < pt->GetLength( 0 ); i++ )
Console::Write( " {0:x2}", pt[ i ] );
}
}
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 algorithm to 'SHA256'.
myAssemblyName.HashAlgorithm = AssemblyHashAlgorithm.SHA256;
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:x2}", 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:x2}", pt[i]);
}
}
}
Imports System.Reflection
Imports System.Threading
Imports System.IO
Imports System.Globalization
Imports System.Reflection.Emit
Imports System.Configuration.Assemblies
Imports System.Text
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
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 = Directory.GetCurrentDirectory()
' Set the culture information of the assembly to 'English-American'.
myAssemblyName.CultureInfo = New CultureInfo("en-US")
' Set the hash algorithm to 'SHA256'.
myAssemblyName.HashAlgorithm = AssemblyHashAlgorithm.SHA256
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:x2}", 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:x2}", pt(i))
Next i
End If
End Sub
End Class
Keterangan
Ketika runtime memuat assembly, runtime tidak mengatur KeyPair properti . Getter untuk properti hanya berguna jika pengguna mengatur properti sebelum menggunakan AssemblyName objek untuk membuat rakitan dinamis, dan kemudian ingin mengambil pasangan kunci.