AssemblyBuilder.DefineUnmanagedResource Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Definiert eine nicht verwaltete Ressource für diese Assembly.
Überlädt
DefineUnmanagedResource(String) |
Definiert eine nicht verwaltete Ressourcendatei für diese Assembly bei gegebenem Namen der Ressourcendatei. |
DefineUnmanagedResource(Byte[]) |
Definiert eine nicht verwaltete Ressource für diese Assembly als nicht transparentes Blob von Bytes. |
DefineUnmanagedResource(String)
Definiert eine nicht verwaltete Ressourcendatei für diese Assembly bei gegebenem Namen der Ressourcendatei.
public:
void DefineUnmanagedResource(System::String ^ resourceFileName);
public void DefineUnmanagedResource (string resourceFileName);
member this.DefineUnmanagedResource : string -> unit
Public Sub DefineUnmanagedResource (resourceFileName As String)
Parameter
- resourceFileName
- String
Der Name der Ressourcendatei.
Ausnahmen
Zuvor wurde eine nicht verwaltete Ressource definiert.
- oder -
Die Datei resourceFileName
ist nicht lesbar.
- oder -
resourceFileName
ist die leere Zeichenfolge ("").
resourceFileName
ist null
.
resourceFileName
wurde nicht gefunden.
- oder -
resourceFileName
ist ein Verzeichnis.
Der Aufrufer verfügt nicht über die erforderliche Berechtigung.
Beispiele
Im folgenden Beispiel wird ein Aufruf von veranschaulicht, der DefineUnmanagedResource
eine externe Ressourcendatei übergibt.
void main()
{
AssemblyBuilder^ myAssembly = CreateAssembly("MyEmitTestAssembly");
// Defines a standalone managed resource for this assembly.
IResourceWriter^ myResourceWriter =
myAssembly->DefineResource( "myResourceFile", "A sample Resource File",
"MyAssemblyResource.resources", ResourceAttributes::Private );
myResourceWriter->AddResource( "AddResource Test", "Testing for the added resource" );
myAssembly->Save(myAssembly->GetName()->Name + ".dll" );
// Defines an unmanaged resource file for this assembly.
myAssembly->DefineUnmanagedResource( "MyAssemblyResource.resources" );
};
internal static void Main()
{
AssemblyBuilder myAssembly = CreateAssembly("MyEmitTestAssembly");
// Defines a standalone managed resource for this assembly.
IResourceWriter myResourceWriter = myAssembly.DefineResource("myResourceFile",
"A sample Resource File", "MyAssemblyResource.resources",
ResourceAttributes.Private);
myResourceWriter.AddResource("AddResource Test", "Testing for the added resource");
myAssembly.Save(myAssembly.GetName().Name + ".dll");
// Defines an unmanaged resource file for this assembly.
myAssembly.DefineUnmanagedResource("MyAssemblyResource.resources");
}
private static AssemblyBuilder CreateAssembly(string name)
{
AssemblyName aName = new AssemblyName(name);
AssemblyBuilder myAssembly =
AppDomain.CurrentDomain.DefineDynamicAssembly(aName,
AssemblyBuilderAccess.Save);
// Define a dynamic module.
ModuleBuilder myModule =
myAssembly.DefineDynamicModule(aName.Name, aName.Name + ".dll");
// Define a public class named "EmitClass" in the assembly.
TypeBuilder myEmitClass = myModule.DefineType("EmitClass", TypeAttributes.Public);
// Define the Display method.
MethodBuilder myMethod = myEmitClass.DefineMethod("Display",
MethodAttributes.Public, typeof(String), null);
// Generate IL for Display method.
ILGenerator methodIL = myMethod.GetILGenerator();
methodIL.Emit(OpCodes.Ldstr, "Display method gets called.");
methodIL.Emit(OpCodes.Ret);
myEmitClass.CreateType();
return(myAssembly);
}
}
Friend Shared Sub Main()
Dim myAssembly As AssemblyBuilder = _
CreateAssembly("MyEmitTestAssembly")
' Defines a standalone managed resource for this assembly.
Dim myResourceWriter As IResourceWriter = _
myAssembly.DefineResource("myResourceFile", _
"A sample Resource File", "MyAssemblyResource.resources", _
ResourceAttributes.Private)
myResourceWriter.AddResource("AddResource Test", "Testing for the added resource")
myAssembly.Save(myAssembly.GetName().Name & ".dll")
' Defines an unmanaged resource file for this assembly.
myAssembly.DefineUnmanagedResource("MyAssemblyResource.resources")
End Sub
Private Shared Function CreateAssembly(ByVal name As String) As AssemblyBuilder
Dim aName As New AssemblyName(name)
Dim myAssembly As AssemblyBuilder = _
AppDomain.CurrentDomain.DefineDynamicAssembly(aName, _
AssemblyBuilderAccess.Save)
' Define a dynamic module.
Dim myModule As ModuleBuilder = _
myAssembly.DefineDynamicModule(aName.Name, aName.Name & ".dll")
' Define a public class named "EmitClass" in the assembly.
Dim myEmitClass As TypeBuilder = _
myModule.DefineType("EmitClass", TypeAttributes.Public)
' Define the Display method.
Dim myMethod As MethodBuilder = _
myEmitClass.DefineMethod("Display", MethodAttributes.Public, _
GetType(String), Nothing)
' Generate IL for Display method.
Dim methodIL As ILGenerator = myMethod.GetILGenerator()
methodIL.Emit(OpCodes.Ldstr, "Display method get called.")
methodIL.Emit(OpCodes.Ret)
myEmitClass.CreateType()
Return myAssembly
End Function
Hinweise
Eine Assembly kann nur einer nicht verwalteten Ressource zugeordnet werden. Dies bedeutet, dass das Aufrufen DefineVersionInfoResource oder DefineUnmanagedResource nachdem eine der Methoden zuvor aufgerufen wurde, system.ArgumentException auslöst. Mehrere nicht verwaltete Ressourcen müssen mit einem Tool wie dem Microsoft ResMerge-Hilfsprogramm (nicht mit der Common Language Runtime bereitgestellt) zusammengeführt werden.
Hinweis
Ab dem .NET Framework 2.0 Service Pack 1 benötigt ReflectionPermission dieses Mitglied nicht mehr das ReflectionPermissionFlag.ReflectionEmit Flag. (Siehe Sicherheitsprobleme in Reflection Emit.) Um diese Funktionalität zu verwenden, sollte Ihre Anwendung auf die .NET Framework 3.5 oder höher abzielen.
Gilt für:
DefineUnmanagedResource(Byte[])
Definiert eine nicht verwaltete Ressource für diese Assembly als nicht transparentes Blob von Bytes.
public:
void DefineUnmanagedResource(cli::array <System::Byte> ^ resource);
public void DefineUnmanagedResource (byte[] resource);
member this.DefineUnmanagedResource : byte[] -> unit
Public Sub DefineUnmanagedResource (resource As Byte())
Parameter
- resource
- Byte[]
Das nicht transparente Blob von Bytes, das die nicht verwaltete Ressource darstellt.
Ausnahmen
Zuvor wurde eine nicht verwaltete Ressource definiert.
resource
ist null
.
Der Aufrufer verfügt nicht über die erforderliche Berechtigung.
Beispiele
Im folgenden Codebeispiel wird ein Array von Bytes erstellt und angefügt, das eine nicht verwaltete Ressource darstellt, mit DefineUnmanagedResource
einer dynamischen Assembly.
/*
The following program demonstrates the 'DefineResource' and 'DefineUnmanagedResource'
methods of 'AssemblyBuilder' class. It builds an assembly and a resource file at runtime.
An unmanaged resource file is also defined for the same resource file. The EmittedTest2.cpp file
calls the methods of "MyEmitAssembly.dll" assembly and the message is displayed to console.
*/
using namespace System;
using namespace System::Threading;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
using namespace System::Resources;
static AssemblyBuilder^ CreateAssembly( String^ name )
{
AssemblyName^ aName = gcnew AssemblyName(name);
AssemblyBuilder^ myAssembly =
AppDomain::CurrentDomain->DefineDynamicAssembly( aName,
AssemblyBuilderAccess::Save );
// Define a dynamic module.
ModuleBuilder^ myModule =
myAssembly->DefineDynamicModule( aName->Name, aName->Name + ".dll" );
// Define a public class named "EmitClass" in the assembly.
TypeBuilder^ myEmitClass =
myModule->DefineType( "EmitClass", TypeAttributes::Public );
// Define the Display method.
MethodBuilder^ myMethod =
myEmitClass->DefineMethod( "Display", MethodAttributes::Public,
String::typeid, nullptr );
// Generate IL for Display method.
ILGenerator^ methodIL = myMethod->GetILGenerator();
methodIL->Emit( OpCodes::Ldstr, "Display method gets called." );
methodIL->Emit( OpCodes::Ret );
myEmitClass->CreateType();
return (myAssembly);
};
void main()
{
AssemblyBuilder^ myAssembly = CreateAssembly("MyEmitTestAssembly");
// Defines a standalone managed resource for this assembly.
IResourceWriter^ myResourceWriter =
myAssembly->DefineResource( "myResourceFile", "A sample Resource File",
"MyAssemblyResource.resources", ResourceAttributes::Private );
myResourceWriter->AddResource( "AddResource Test", "Testing for the added resource" );
myAssembly->Save(myAssembly->GetName()->Name + ".dll" );
// Defines an unmanaged resource file for this assembly.
myAssembly->DefineUnmanagedResource( gcnew array<Byte>{01, 00, 01} );
};
using System;
using System.Threading;
using System.Reflection;
using System.Reflection.Emit;
using System.Resources;
public class MyAssemblyResource
{
internal static void Main()
{
AssemblyBuilder myAssembly = CreateAssembly("MyEmitTestAssembly");
// Defines a standalone managed resource for this assembly.
IResourceWriter myResourceWriter = myAssembly.DefineResource("myResourceFile",
"A sample Resource File", "MyAssemblyResource.resources",
ResourceAttributes.Private);
myResourceWriter.AddResource("AddResource Test", "Testing for the added resource");
myAssembly.Save(myAssembly.GetName().Name + ".dll");
// Defines an unmanaged resource file for this assembly.
myAssembly.DefineUnmanagedResource(new byte[]{01, 00, 01});
}
private static AssemblyBuilder CreateAssembly(string name)
{
AssemblyName aName = new AssemblyName(name);
AssemblyBuilder myAssembly =
AppDomain.CurrentDomain.DefineDynamicAssembly(aName,
AssemblyBuilderAccess.Save);
// Define a dynamic module.
ModuleBuilder myModule =
myAssembly.DefineDynamicModule(aName.Name, aName.Name + ".dll");
// Define a public class named "EmitClass" in the assembly.
TypeBuilder myEmitClass = myModule.DefineType("EmitClass", TypeAttributes.Public);
// Define the Display method.
MethodBuilder myMethod = myEmitClass.DefineMethod("Display",
MethodAttributes.Public, typeof(String), null);
// Generate IL for Display method.
ILGenerator methodIL = myMethod.GetILGenerator();
methodIL.Emit(OpCodes.Ldstr, "Display method gets called.");
methodIL.Emit(OpCodes.Ret);
myEmitClass.CreateType();
return(myAssembly);
}
}
Imports System.Threading
Imports System.Reflection
Imports System.Reflection.Emit
Imports System.Resources
Public Class MyAssemblyResource
Friend Shared Sub Main()
Dim myAssembly As AssemblyBuilder = _
CreateAssembly("MyEmitTestAssembly")
' Defines a standalone managed resource for this assembly.
Dim myResourceWriter As IResourceWriter = _
myAssembly.DefineResource("myResourceFile", _
"A sample Resource File", "MyAssemblyResource.resources", _
ResourceAttributes.Private)
myResourceWriter.AddResource("AddResource Test", "Testing for the added resource")
myAssembly.Save(myAssembly.GetName().Name & ".dll")
' Defines an unmanaged resource file for this assembly.
myAssembly.DefineUnmanagedResource(New Byte() {1, 0, 1})
End Sub
Private Shared Function CreateAssembly(ByVal name As String) As AssemblyBuilder
Dim aName As New AssemblyName(name)
Dim myAssembly As AssemblyBuilder = _
AppDomain.CurrentDomain.DefineDynamicAssembly(aName, _
AssemblyBuilderAccess.Save)
' Define a dynamic module.
Dim myModule As ModuleBuilder = _
myAssembly.DefineDynamicModule(aName.Name, aName.Name & ".dll")
' Define a public class named "EmitClass" in the assembly.
Dim myEmitClass As TypeBuilder = _
myModule.DefineType("EmitClass", TypeAttributes.Public)
' Define the Display method.
Dim myMethod As MethodBuilder = _
myEmitClass.DefineMethod("Display", MethodAttributes.Public, _
GetType(String), Nothing)
' Generate IL for Display method.
Dim methodIL As ILGenerator = myMethod.GetILGenerator()
methodIL.Emit(OpCodes.Ldstr, "Display method get called.")
methodIL.Emit(OpCodes.Ret)
myEmitClass.CreateType()
Return myAssembly
End Function
End Class
Hinweise
Eine Assembly kann nur einer nicht verwalteten Ressource zugeordnet werden. Dies bedeutet, dass das Aufrufen DefineVersionInfoResource oder DefineUnmanagedResource nachdem eine der Methoden zuvor aufgerufen wurde, die System.ArgumentException ausgelöst wird. Mehrere nicht verwaltete Ressourcen müssen mit einem Tool wie dem Microsoft ResMerge-Hilfsprogramm (nicht mit der Common Language Runtime bereitgestellt) zusammengeführt werden.