AssemblyBuilder.DefineUnmanagedResource 方法    
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
定义此程序集的非托管资源。
重载
| DefineUnmanagedResource(String) | 定义此程序集的非托管资源文件(已知资源文件名)。 | 
| DefineUnmanagedResource(Byte[]) | 将此程序集的非托管资源定义为字节的不透明 blob。 | 
DefineUnmanagedResource(String)
定义此程序集的非托管资源文件(已知资源文件名)。
public:
 void DefineUnmanagedResource(System::String ^ resourceFileName);public void DefineUnmanagedResource(string resourceFileName);member this.DefineUnmanagedResource : string -> unitPublic Sub DefineUnmanagedResource (resourceFileName As String)参数
- resourceFileName
- String
资源文件的名称。
例外
              resourceFileName 为 null。
调用方没有所要求的权限。
示例
下面的示例演示了对 DefineUnmanagedResource传递外部资源文件的调用。
   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
注解
一个程序集只能与一个非托管资源相关联。 这意味着,调用 DefineVersionInfoResource 或 DefineUnmanagedResource 之前调用任一方法后,将引发 System.ArgumentException。 多个非托管资源需要与未随公共语言运行时) 一起提供的工具(如 Microsoft ResMerge 实用工具)合并 (。
注意
从 .NET Framework 2.0 Service Pack 1 开始,此成员不再需要ReflectionPermission标志ReflectionPermissionFlag.ReflectionEmit。 (请参阅反射发出中的安全问题.) 若要使用此功能,应用程序应面向.NET Framework 3.5 或更高版本。
适用于
DefineUnmanagedResource(Byte[])
将此程序集的非托管资源定义为字节的不透明 blob。
public:
 void DefineUnmanagedResource(cli::array <System::Byte> ^ resource);public void DefineUnmanagedResource(byte[] resource);member this.DefineUnmanagedResource : byte[] -> unitPublic Sub DefineUnmanagedResource (resource As Byte())参数
- resource
- Byte[]
表示非托管资源的字节的不透明 blob。
例外
以前定义过非托管资源。
              resource 为 null。
调用方没有所要求的权限。
示例
下面的代码示例使用 DefineUnmanagedResource创建表示非托管资源的字节数组并将其附加到动态程序集。
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
注解
一个程序集只能与一个非托管资源相关联。 这意味着,调用 DefineVersionInfoResource 或 DefineUnmanagedResource 之前调用任一方法后,将引发要引发的 System.ArgumentException。 多个非托管资源需要与未随公共语言运行时) 一起提供的工具(如 Microsoft ResMerge 实用工具)合并 (。