AssemblyBuilder.DefineUnmanagedResource Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Definiuje niezarządzany zasób dla tego zestawu.
Przeciążenia
DefineUnmanagedResource(String) |
Definiuje niezarządzany plik zasobów dla tego zestawu pod nazwą pliku zasobu. |
DefineUnmanagedResource(Byte[]) |
Definiuje niezarządzany zasób dla tego zestawu jako nieprzezroczysty obiekt blob bajtów. |
DefineUnmanagedResource(String)
Definiuje niezarządzany plik zasobów dla tego zestawu pod nazwą pliku zasobu.
public:
void DefineUnmanagedResource(System::String ^ resourceFileName);
public void DefineUnmanagedResource (string resourceFileName);
member this.DefineUnmanagedResource : string -> unit
Public Sub DefineUnmanagedResource (resourceFileName As String)
Parametry
- resourceFileName
- String
Nazwa pliku zasobu.
Wyjątki
Wcześniej zdefiniowano niezarządzany zasób.
-lub-
Plik resourceFileName
nie jest czytelny.
-lub-
resourceFileName
jest pustym ciągiem ("").
resourceFileName
to null
.
Obiekt wywołujący nie posiada wymaganych uprawnień.
Przykłady
W poniższym przykładzie pokazano wywołanie metody DefineUnmanagedResource
, przekazując plik zasobów zewnętrznych.
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
Uwagi
Zestaw może być skojarzony z tylko jednym zasobem niezarządzanym. Oznacza to, że wywołanie lub DefineUnmanagedResource po wywołaniu DefineVersionInfoResource jednej z metod zostało wcześniej wywołane, spowoduje zgłoszenie błędu System.ArgumentException. Wiele niezarządzanych zasobów należy scalić z narzędziem, takim jak narzędzie Microsoft ResMerge (nie jest dostarczane ze środowiskiem uruchomieniowym języka wspólnego).
Uwaga
Począwszy od .NET Framework dodatku Service Pack 2.0, ten element członkowski nie wymaga ReflectionPermission już flagiReflectionPermissionFlag.ReflectionEmit. (Zobacz Problemy z zabezpieczeniami w emitu odbicia). Aby korzystać z tej funkcji, aplikacja powinna być docelowa dla .NET Framework 3.5 lub nowszej.
Dotyczy
DefineUnmanagedResource(Byte[])
Definiuje niezarządzany zasób dla tego zestawu jako nieprzezroczysty obiekt blob bajtów.
public:
void DefineUnmanagedResource(cli::array <System::Byte> ^ resource);
public void DefineUnmanagedResource (byte[] resource);
member this.DefineUnmanagedResource : byte[] -> unit
Public Sub DefineUnmanagedResource (resource As Byte())
Parametry
- resource
- Byte[]
Nieprzezroczysty obiekt blob bajtów reprezentujący niezarządzany zasób.
Wyjątki
Wcześniej zdefiniowano niezarządzany zasób.
resource
to null
.
Obiekt wywołujący nie posiada wymaganych uprawnień.
Przykłady
Poniższy przykładowy kod tworzy i dołącza tablicę bajtów reprezentujących zasób niezarządzany do zestawu dynamicznego przy użyciu polecenia DefineUnmanagedResource
.
/*
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
Uwagi
Zestaw może być skojarzony z tylko jednym zasobem niezarządzanym. Oznacza to, że wywołanie lub DefineUnmanagedResource po wywołaniu DefineVersionInfoResource jednej z metod zostało wcześniej wywołane, spowoduje zgłoszenie błędu System.ArgumentException. Wiele niezarządzanych zasobów należy scalić z narzędziem, takim jak narzędzie Microsoft ResMerge (nie jest dostarczane ze środowiskiem uruchomieniowym języka wspólnego).