AssemblyBuilder.AddResourceFile 方法    
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
将现有资源文件添加到此程序集。
重载
| AddResourceFile(String, String) | 将现有资源文件添加到此程序集。 | 
| AddResourceFile(String, String, ResourceAttributes) | 将现有资源文件添加到此程序集。 | 
AddResourceFile(String, String)
将现有资源文件添加到此程序集。
public:
 void AddResourceFile(System::String ^ name, System::String ^ fileName);public void AddResourceFile(string name, string fileName);member this.AddResourceFile : string * string -> unitPublic Sub AddResourceFile (name As String, fileName As String)参数
- name
- String
资源的逻辑名称。
- fileName
- String
逻辑名称将映射到的物理文件(.resources 文件)的名称。 文件名不应包含路径;该文件必须与将其添加到的程序集位于同一目录中。
例外
以前定义过 name。
- 或 -
程序集中还有另一个名为 fileName 的文件。
- 或 -
              name 的长度为零。
- 或 -
              fileName 的长度为零,或者如果 fileName 包含路径。
              name 或 fileName 为 null。
未找到文件 fileName。
调用方没有所要求的权限。
示例
以下代码示例演示如何使用 AddResourceFile将资源文件附加到动态创建的程序集。
using System;
using System.IO;
using System.Threading;
using System.Reflection;
using System.Reflection.Emit;
class AsmBuilderGetFileDemo
{
   private static string myResourceFileName = "MyResource.txt";
   private static FileInfo CreateResourceFile()
   {
        FileInfo f = new FileInfo(myResourceFileName);
    StreamWriter sw = f.CreateText();
    sw.WriteLine("Hello, world!");
    sw.Close();
    return f;
   }
   private static AssemblyBuilder BuildDynAssembly()
   {
    string myAsmFileName = "MyAsm.dll";
    
    AppDomain myDomain = Thread.GetDomain();
    AssemblyName myAsmName = new AssemblyName();
    myAsmName.Name = "MyDynamicAssembly";	
    AssemblyBuilder myAsmBuilder = myDomain.DefineDynamicAssembly(
                        myAsmName,
                        AssemblyBuilderAccess.RunAndSave);
    myAsmBuilder.AddResourceFile("MyResource", myResourceFileName);
    // To confirm that the resource file has been added to the manifest,
    // we will save the assembly as MyAsm.dll. You can view the manifest
    // and confirm the presence of the resource file by running
    // "ildasm MyAsm.dll" from the prompt in the directory where you executed
    // the compiled code.
    myAsmBuilder.Save(myAsmFileName);	
    return myAsmBuilder;
   }
   public static void Main()
   {
    FileStream myResourceFS = null;
    CreateResourceFile();
    Console.WriteLine("The contents of MyResource.txt, via GetFile:");
    AssemblyBuilder myAsm = BuildDynAssembly();
    try
        {
       myResourceFS = myAsm.GetFile(myResourceFileName);
        }
    catch (NotSupportedException)
    {
       Console.WriteLine("---");
       Console.WriteLine("System.Reflection.Emit.AssemblyBuilder.GetFile\nis not supported " +
                 "in this SDK build.");
       Console.WriteLine("The file data will now be retrieved directly, via a new FileStream.");
       Console.WriteLine("---");
       myResourceFS = new FileStream(myResourceFileName,
                     FileMode.Open);
    }
    
    StreamReader sr = new StreamReader(myResourceFS, System.Text.Encoding.ASCII);
    Console.WriteLine(sr.ReadToEnd());
    sr.Close();
   }
}
Imports System.IO
Imports System.Threading
Imports System.Reflection
Imports System.Reflection.Emit
 _
Class AsmBuilderGetFileDemo
   
   Private Shared myResourceFileName As String = "MyResource.txt"
   
   
   Private Shared Function CreateResourceFile() As FileInfo
      
      Dim f As New FileInfo(myResourceFileName)
      Dim sw As StreamWriter = f.CreateText()
      
      sw.WriteLine("Hello, world!")
      
      sw.Close()
      
      Return f
   End Function 'CreateResourceFile
    
   
   Private Shared Function BuildDynAssembly() As AssemblyBuilder
      
      Dim myAsmFileName As String = "MyAsm.dll"
      
      Dim myDomain As AppDomain = Thread.GetDomain()
      Dim myAsmName As New AssemblyName()
      myAsmName.Name = "MyDynamicAssembly"
      
      Dim myAsmBuilder As AssemblyBuilder = myDomain.DefineDynamicAssembly(myAsmName, _
                        AssemblyBuilderAccess.RunAndSave)
      
      myAsmBuilder.AddResourceFile("MyResource", myResourceFileName)
      
      ' To confirm that the resource file has been added to the manifest,
      ' we will save the assembly as MyAsm.dll. You can view the manifest
      ' and confirm the presence of the resource file by running 
      ' "ildasm MyAsm.dll" from the prompt in the directory where you executed
      ' the compiled code. 
      myAsmBuilder.Save(myAsmFileName)
      
      Return myAsmBuilder
   End Function 'BuildDynAssembly
    
   
   Public Shared Sub Main()
      
      Dim myResourceFS As FileStream = Nothing
      
      CreateResourceFile()
      
      Console.WriteLine("The contents of MyResource.txt, via GetFile:")
      
      Dim myAsm As AssemblyBuilder = BuildDynAssembly()
      
      Try
         myResourceFS = myAsm.GetFile(myResourceFileName)
      Catch nsException As NotSupportedException
     
     Console.WriteLine("---")
     Console.WriteLine("System.Reflection.Emit.AssemblyBuilder.GetFile is not supported " + _
                 "in this SDK build.")
     Console.WriteLine("The file data will now be retrieved directly, via a new FileStream.")
     Console.WriteLine("---")
     myResourceFS = New FileStream(myResourceFileName, FileMode.Open) 
      End Try
      
      Dim sr As New StreamReader(myResourceFS, System.Text.Encoding.ASCII)
      Console.WriteLine(sr.ReadToEnd())
      sr.Close()
   End Sub
End Class
注解
              fileName 不应与任何其他可持久化模块、独立托管资源或独立清单文件相同。
文件中的托管资源假定为公共资源。
指定的资源文件必须位于将保存程序集的目录中。
注意
从 .NET Framework 2.0 Service Pack 1 开始,此成员不再需要ReflectionPermission标志ReflectionPermissionFlag.ReflectionEmit。 (请参阅反射发出中的安全问题.) 若要使用此功能,应用程序应面向.NET Framework 3.5 或更高版本。
适用于
AddResourceFile(String, String, ResourceAttributes)
将现有资源文件添加到此程序集。
public:
 void AddResourceFile(System::String ^ name, System::String ^ fileName, System::Reflection::ResourceAttributes attribute);public void AddResourceFile(string name, string fileName, System.Reflection.ResourceAttributes attribute);member this.AddResourceFile : string * string * System.Reflection.ResourceAttributes -> unitPublic Sub AddResourceFile (name As String, fileName As String, attribute As ResourceAttributes)参数
- name
- String
资源的逻辑名称。
- fileName
- String
逻辑名称将映射到的物理文件(.resources 文件)的名称。 文件名不应包含路径;该文件必须与将其添加到的程序集位于同一目录中。
- attribute
- ResourceAttributes
资源属性。
例外
以前定义过 name。
- 或 -
程序集中还有另一个名为 fileName 的文件。
- 或 -
              name 的长度为零,或者,如果 fileName 的长度为零。
- 或 -
              fileName 包含路径。
              name 或 fileName 为 null。
如果未找到文件 fileName。
调用方没有所要求的权限。
示例
以下代码示例演示如何使用 AddResourceFile将资源文件附加到动态创建的程序集。
using System;
using System.IO;
using System.Threading;
using System.Reflection;
using System.Reflection.Emit;
class AsmBuilderGetFileDemo
{
   private static string myResourceFileName = "MyResource.txt";
   private static FileInfo CreateResourceFile()
   {
        FileInfo f = new FileInfo(myResourceFileName);
    StreamWriter sw = f.CreateText();
    sw.WriteLine("Hello, world!");
    sw.Close();
    return f;
   }
   private static AssemblyBuilder BuildDynAssembly()
   {
    string myAsmFileName = "MyAsm.dll";
    
    AppDomain myDomain = Thread.GetDomain();
    AssemblyName myAsmName = new AssemblyName();
    myAsmName.Name = "MyDynamicAssembly";	
    AssemblyBuilder myAsmBuilder = myDomain.DefineDynamicAssembly(
                        myAsmName,
                        AssemblyBuilderAccess.RunAndSave);
    myAsmBuilder.AddResourceFile("MyResource", myResourceFileName);
    // To confirm that the resource file has been added to the manifest,
    // we will save the assembly as MyAsm.dll. You can view the manifest
    // and confirm the presence of the resource file by running
    // "ildasm MyAsm.dll" from the prompt in the directory where you executed
    // the compiled code.
    myAsmBuilder.Save(myAsmFileName);	
    return myAsmBuilder;
   }
   public static void Main()
   {
    FileStream myResourceFS = null;
    CreateResourceFile();
    Console.WriteLine("The contents of MyResource.txt, via GetFile:");
    AssemblyBuilder myAsm = BuildDynAssembly();
    try
        {
       myResourceFS = myAsm.GetFile(myResourceFileName);
        }
    catch (NotSupportedException)
    {
       Console.WriteLine("---");
       Console.WriteLine("System.Reflection.Emit.AssemblyBuilder.GetFile\nis not supported " +
                 "in this SDK build.");
       Console.WriteLine("The file data will now be retrieved directly, via a new FileStream.");
       Console.WriteLine("---");
       myResourceFS = new FileStream(myResourceFileName,
                     FileMode.Open);
    }
    
    StreamReader sr = new StreamReader(myResourceFS, System.Text.Encoding.ASCII);
    Console.WriteLine(sr.ReadToEnd());
    sr.Close();
   }
}
Imports System.IO
Imports System.Threading
Imports System.Reflection
Imports System.Reflection.Emit
 _
Class AsmBuilderGetFileDemo
   
   Private Shared myResourceFileName As String = "MyResource.txt"
   
   
   Private Shared Function CreateResourceFile() As FileInfo
      
      Dim f As New FileInfo(myResourceFileName)
      Dim sw As StreamWriter = f.CreateText()
      
      sw.WriteLine("Hello, world!")
      
      sw.Close()
      
      Return f
   End Function 'CreateResourceFile
    
   
   Private Shared Function BuildDynAssembly() As AssemblyBuilder
      
      Dim myAsmFileName As String = "MyAsm.dll"
      
      Dim myDomain As AppDomain = Thread.GetDomain()
      Dim myAsmName As New AssemblyName()
      myAsmName.Name = "MyDynamicAssembly"
      
      Dim myAsmBuilder As AssemblyBuilder = myDomain.DefineDynamicAssembly(myAsmName, _
                        AssemblyBuilderAccess.RunAndSave)
      
      myAsmBuilder.AddResourceFile("MyResource", myResourceFileName)
      
      ' To confirm that the resource file has been added to the manifest,
      ' we will save the assembly as MyAsm.dll. You can view the manifest
      ' and confirm the presence of the resource file by running 
      ' "ildasm MyAsm.dll" from the prompt in the directory where you executed
      ' the compiled code. 
      myAsmBuilder.Save(myAsmFileName)
      
      Return myAsmBuilder
   End Function 'BuildDynAssembly
    
   
   Public Shared Sub Main()
      
      Dim myResourceFS As FileStream = Nothing
      
      CreateResourceFile()
      
      Console.WriteLine("The contents of MyResource.txt, via GetFile:")
      
      Dim myAsm As AssemblyBuilder = BuildDynAssembly()
      
      Try
         myResourceFS = myAsm.GetFile(myResourceFileName)
      Catch nsException As NotSupportedException
     
     Console.WriteLine("---")
     Console.WriteLine("System.Reflection.Emit.AssemblyBuilder.GetFile is not supported " + _
                 "in this SDK build.")
     Console.WriteLine("The file data will now be retrieved directly, via a new FileStream.")
     Console.WriteLine("---")
     myResourceFS = New FileStream(myResourceFileName, FileMode.Open) 
      End Try
      
      Dim sr As New StreamReader(myResourceFS, System.Text.Encoding.ASCII)
      Console.WriteLine(sr.ReadToEnd())
      sr.Close()
   End Sub
End Class
注解
              fileName 不应与任何其他可持久化模块、独立托管资源或独立清单文件相同。
可以为托管资源指定的属性。
指定的资源文件必须位于将保存程序集的目录中。
注意
从 .NET Framework 2.0 Service Pack 1 开始,此成员不再需要ReflectionPermission标志ReflectionPermissionFlag.ReflectionEmit。 (请参阅反射发出中的安全问题.) 若要使用此功能,应用程序应面向.NET Framework 3.5 或更高版本。