AssemblyBuilder.DefineUnmanagedResource Método

Definición

Define un recurso no administrado para este ensamblado.

Sobrecargas

DefineUnmanagedResource(String)

Define un archivo de recurso no administrado para este ensamblado con el nombre del archivo de recursos.

DefineUnmanagedResource(Byte[])

Define un recurso no administrado para este ensamblado como blob opaco de bytes.

DefineUnmanagedResource(String)

Define un archivo de recurso no administrado para este ensamblado con el nombre del archivo de recursos.

C#
public void DefineUnmanagedResource(string resourceFileName);

Parámetros

resourceFileName
String

Nombre del archivo de recursos.

Excepciones

Se definió anteriormente un recurso no administrado.

o bien

El archivo resourceFileName no es legible.

o bien

resourceFileName es la cadena vacía ("").

resourceFileName es null.

No se ha encontrado resourceFileName.

o bien

resourceFileName es un directorio.

El llamador no dispone del permiso requerido.

Ejemplos

En el ejemplo siguiente se muestra una llamada a DefineUnmanagedResource, pasando un archivo de recursos externo.

C#
   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);
   }
}

Comentarios

Un ensamblado solo se puede asociar a un recurso no administrado. Esto significa que la llamada a DefineVersionInfoResource o DefineUnmanagedResource después de llamar a uno de los métodos se llamó anteriormente producirá la excepción System.ArgumentException. Es necesario combinar varios recursos no administrados con una herramienta como la utilidad Microsoft ResMerge (no se proporciona con Common Language Runtime).

Nota

A partir de .NET Framework 2.0 Service Pack 1, este miembro ya no requiere ReflectionPermission con la ReflectionPermissionFlag.ReflectionEmit marca . (Consulte Problemas de seguridad en emisión de reflexión). Para usar esta funcionalidad, la aplicación debe tener como destino .NET Framework 3.5 o posterior.

Se aplica a

.NET Framework 4.8.1 otras versiones
Producto Versiones
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

DefineUnmanagedResource(Byte[])

Define un recurso no administrado para este ensamblado como blob opaco de bytes.

C#
public void DefineUnmanagedResource(byte[] resource);

Parámetros

resource
Byte[]

Blob opaco de bytes que representa el recurso no administrado.

Excepciones

Se definió anteriormente un recurso no administrado.

resource es null.

El llamador no dispone del permiso requerido.

Ejemplos

En el ejemplo de código siguiente se crea y se adjunta una matriz de bytes que representa un recurso no administrado a un ensamblado dinámico, mediante DefineUnmanagedResource.

C#
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);
   }
}

Comentarios

Un ensamblado solo se puede asociar a un recurso no administrado. Esto significa que llamar a DefineVersionInfoResource o DefineUnmanagedResource después de llamar a uno de los métodos anteriormente iniciará la excepción System.ArgumentException que se está iniciando. Es necesario combinar varios recursos no administrados con una herramienta como la utilidad Microsoft ResMerge (no se proporciona con Common Language Runtime).

Se aplica a

.NET Framework 4.8.1 otras versiones
Producto Versiones
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1