AssemblyBuilder.DefineResource 方法
定义
定义此程序集的独立托管资源。Defines a standalone managed resource for this assembly.
重载
| DefineResource(String, String, String) |
使用默认公共资源属性,为此程序集定义一个独立托管资源。Defines a standalone managed resource for this assembly with the default public resource attribute. |
| DefineResource(String, String, String, ResourceAttributes) |
定义此程序集的独立托管资源。Defines a standalone managed resource for this assembly. 可以为托管资源指定的属性。Attributes can be specified for the managed resource. |
DefineResource(String, String, String)
使用默认公共资源属性,为此程序集定义一个独立托管资源。Defines a standalone managed resource for this assembly with the default public resource attribute.
public:
System::Resources::IResourceWriter ^ DefineResource(System::String ^ name, System::String ^ description, System::String ^ fileName);
public System.Resources.IResourceWriter DefineResource (string name, string description, string fileName);
member this.DefineResource : string * string * string -> System.Resources.IResourceWriter
Public Function DefineResource (name As String, description As String, fileName As String) As IResourceWriter
参数
- name
- String
资源的逻辑名称。The logical name of the resource.
- description
- String
资源的文本说明。A textual description of the resource.
- fileName
- String
逻辑名称将映射到的物理文件(.resources 文件)的名称。The physical file name (.resources file) to which the logical name is mapped. 这不应包含路径。This should not include a path.
返回
指定资源的 ResourceWriter 对象。A ResourceWriter object for the specified resource.
例外
以前定义过 name。name has been previously defined.
- 或 --or-
程序集中还有另一个名为 fileName 的文件。There is another file in the assembly named fileName.
- 或 --or-
name 的长度为零。The length of name is zero.
- 或 --or-
fileName 的长度为零。The length of fileName is zero.
- 或 --or-
fileName 包含路径。fileName includes a path.
name 或 fileName 为 null。name or fileName is null.
调用方没有所要求的权限。The caller does not have the required permission.
示例
下面的示例使用 DefineResource 方法获取资源编写器。The following example uses the DefineResource method to get a resource writer. 该示例使用资源编写器来添加三个资源字符串。The example uses the resource writer to add three resource strings.
using namespace System;
using namespace System::Threading;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
using namespace System::Resources;
/*
The following program demonstrates the 'DefineResource' and 'DefineVersionInfoResource'
methods of 'AssemblyBuilder' class. It builds an assembly and a resource file at runtime.
The unmanaged version information like product, product version, Company, Copyright,
trademark are defined with 'DefineVersionInfoResource' method.
*/
static Type^ CreateAssembly( AppDomain^ appDomain );
int main()
{
AssemblyBuilder^ myAssembly;
IResourceWriter^ myResourceWriter;
myAssembly = safe_cast<AssemblyBuilder^>(CreateAssembly( Thread::GetDomain() )->Assembly);
myResourceWriter = myAssembly->DefineResource( "myResourceFile", "A sample Resource File", "MyEmitAssembly.MyResource.resources" );
myResourceWriter->AddResource( "AddResource 1", "First added resource" );
myResourceWriter->AddResource( "AddResource 2", "Second added resource" );
myResourceWriter->AddResource( "AddResource 3", "Third added resource" );
myAssembly->DefineVersionInfoResource( "AssemblySample", "2:0:0:1", "Microsoft Corporation", "@Copyright Microsoft Corp. 1990-2001", ".NET is a trademark of Microsoft Corporation" );
myAssembly->Save( "MyEmitAssembly.dll" );
}
// Create the callee transient dynamic assembly.
static Type^ CreateAssembly( AppDomain^ appDomain )
{
AssemblyName^ myAssemblyName = gcnew AssemblyName;
myAssemblyName->Name = "MyEmitAssembly";
AssemblyBuilder^ myAssembly = appDomain->DefineDynamicAssembly( myAssemblyName, AssemblyBuilderAccess::Save );
ModuleBuilder^ myModule = myAssembly->DefineDynamicModule( "EmittedModule", "EmittedModule.mod" );
// Define a public class named "HelloWorld" in the assembly.
TypeBuilder^ helloWorldClass = myModule->DefineType( "HelloWorld", TypeAttributes::Public );
// Define the Display method.
MethodBuilder^ myMethod = helloWorldClass->DefineMethod( "Display", MethodAttributes::Public, String::typeid, nullptr );
// Generate IL for GetGreeting.
ILGenerator^ methodIL = myMethod->GetILGenerator();
methodIL->Emit( OpCodes::Ldstr, "Display method get called." );
methodIL->Emit( OpCodes::Ret );
// Returns the type HelloWorld.
return (helloWorldClass->CreateType());
}
public static void Main()
{
AssemblyBuilder myAssembly;
IResourceWriter myResourceWriter;
myAssembly = (AssemblyBuilder)CreateAssembly(Thread.GetDomain()).Assembly;
myResourceWriter = myAssembly.DefineResource("myResourceFile",
"A sample Resource File", "MyEmitAssembly.MyResource.resources");
myResourceWriter.AddResource("AddResource 1", "First added resource");
myResourceWriter.AddResource("AddResource 2", "Second added resource");
myResourceWriter.AddResource("AddResource 3", "Third added resource");
myAssembly.DefineVersionInfoResource("AssemblySample", "2:0:0:1",
"Microsoft Corporation", "@Copyright Microsoft Corp. 1990-2001",
".NET is a trademark of Microsoft Corporation");
myAssembly.Save("MyEmitAssembly.dll");
}
// Create the callee transient dynamic assembly.
private static Type CreateAssembly(AppDomain appDomain)
{
AssemblyName myAssemblyName = new AssemblyName();
myAssemblyName.Name = "MyEmitAssembly";
AssemblyBuilder myAssembly = appDomain.DefineDynamicAssembly(myAssemblyName,
AssemblyBuilderAccess.Save);
ModuleBuilder myModule = myAssembly.DefineDynamicModule("EmittedModule",
"EmittedModule.mod");
// Define a public class named "HelloWorld" in the assembly.
TypeBuilder helloWorldClass =
myModule.DefineType("HelloWorld", TypeAttributes.Public);
// Define the Display method.
MethodBuilder myMethod = helloWorldClass.DefineMethod("Display",
MethodAttributes.Public, typeof(String), null);
// Generate IL for GetGreeting.
ILGenerator methodIL = myMethod.GetILGenerator();
methodIL.Emit(OpCodes.Ldstr, "Display method get called.");
methodIL.Emit(OpCodes.Ret);
// Returns the type HelloWorld.
return(helloWorldClass.CreateType());
}
Public Shared Sub Main()
Dim myAssembly As AssemblyBuilder
Dim myResourceWriter As IResourceWriter
myAssembly = CType(CreateAssembly(Thread.GetDomain()).Assembly, AssemblyBuilder)
myResourceWriter = myAssembly.DefineResource("myResourceFile", "A sample Resource File", _
"MyEmitAssembly.MyResource.resources")
myResourceWriter.AddResource("AddResource 1", "First added resource")
myResourceWriter.AddResource("AddResource 2", "Second added resource")
myResourceWriter.AddResource("AddResource 3", "Third added resource")
myAssembly.DefineVersionInfoResource("AssemblySample", "2:0:0:1", "Microsoft Corporation", _
"@Copyright Microsoft Corp. 1990-2001", ".NET is a trademark of Microsoft Corporation")
myAssembly.Save("MyEmitAssembly.dll")
End Sub
' Create the callee transient dynamic assembly.
Private Shared Function CreateAssembly(myAppDomain As AppDomain) As Type
Dim myAssemblyName As New AssemblyName()
myAssemblyName.Name = "MyEmitAssembly"
Dim myAssembly As AssemblyBuilder = myAppDomain.DefineDynamicAssembly(myAssemblyName, _
AssemblyBuilderAccess.Save)
Dim myModule As ModuleBuilder = myAssembly.DefineDynamicModule("EmittedModule", _
"EmittedModule.mod")
' Define a public class named "HelloWorld" in the assembly.
Dim helloWorldClass As TypeBuilder = myModule.DefineType("HelloWorld", TypeAttributes.Public)
' Define the Display method.
Dim myMethod As MethodBuilder = helloWorldClass.DefineMethod("Display", _
MethodAttributes.Public, GetType(String), Nothing)
' Generate IL for GetGreeting.
Dim methodIL As ILGenerator = myMethod.GetILGenerator()
methodIL.Emit(OpCodes.Ldstr, "Display method get called.")
methodIL.Emit(OpCodes.Ret)
' Returns the type HelloWorld.
Return helloWorldClass.CreateType()
End Function 'CreateAssembly
注解
可以通过调用来添加精细的资源和返回的 ResourceWriter AddResource 。Fine grain resources can be added with the returned ResourceWriter by calling AddResource.
fileName 不应与任何其他持久模块、独立托管资源或独立清单文件中的相同。fileName should not be the same as that of any other persistable module, stand-alone managed resource, or the stand-alone manifest file.
Close保存动态程序集时,运行时将调用方法。The runtime calls the Close method when the dynamic assembly is saved.
备注
从 .NET Framework 2.0 Service Pack 1 开始,此成员不再需要 ReflectionPermission 带有 ReflectionPermissionFlag.ReflectionEmit 标志的。Starting with the .NET Framework 2.0 Service Pack 1, this member no longer requires ReflectionPermission with the ReflectionPermissionFlag.ReflectionEmit flag. (参阅 反射发出中的安全问题。 ) 若要使用此功能,你的应用程序应面向 .NET Framework 3.5 或更高版本。(See Security Issues in Reflection Emit.) To use this functionality, your application should target the .NET Framework 3.5 or later.
适用于
DefineResource(String, String, String, ResourceAttributes)
定义此程序集的独立托管资源。Defines a standalone managed resource for this assembly. 可以为托管资源指定的属性。Attributes can be specified for the managed resource.
public:
System::Resources::IResourceWriter ^ DefineResource(System::String ^ name, System::String ^ description, System::String ^ fileName, System::Reflection::ResourceAttributes attribute);
public System.Resources.IResourceWriter DefineResource (string name, string description, string fileName, System.Reflection.ResourceAttributes attribute);
member this.DefineResource : string * string * string * System.Reflection.ResourceAttributes -> System.Resources.IResourceWriter
Public Function DefineResource (name As String, description As String, fileName As String, attribute As ResourceAttributes) As IResourceWriter
参数
- name
- String
资源的逻辑名称。The logical name of the resource.
- description
- String
资源的文本说明。A textual description of the resource.
- fileName
- String
逻辑名称将映射到的物理文件(.resources 文件)的名称。The physical file name (.resources file) to which the logical name is mapped. 这不应包含路径。This should not include a path.
- attribute
- ResourceAttributes
资源属性。The resource attributes.
返回
指定资源的 ResourceWriter 对象。A ResourceWriter object for the specified resource.
例外
先前已定义 name,或者,如果程序集中有另一个名为 fileName 的文件。name has been previously defined or if there is another file in the assembly named fileName.
- 或 --or-
name 的长度为零。The length of name is zero.
- 或 --or-
fileName 的长度为零。The length of fileName is zero.
- 或 --or-
fileName 包含路径。fileName includes a path.
name 或 fileName 为 null。name or fileName is null.
调用方没有所要求的权限。The caller does not have the required permission.
注解
可以通过调用来添加精细资源和返回的 ResourceWriter AddResource 。Fine-grain resources can be added with the returned ResourceWriter by calling AddResource.
fileName 不应与任何其他持久模块、独立托管资源或独立清单文件中的相同。fileName should not be the same as that of any other persistable module, standalone managed resource, or the standalone manifest file.
Close保存动态程序集时,运行时将调用方法。The runtime calls the Close method when the dynamic assembly is saved.
备注
从 .NET Framework 2.0 Service Pack 1 开始,此成员不再需要 ReflectionPermission 带有 ReflectionPermissionFlag.ReflectionEmit 标志的。Starting with the .NET Framework 2.0 Service Pack 1, this member no longer requires ReflectionPermission with the ReflectionPermissionFlag.ReflectionEmit flag. (参阅 反射发出中的安全问题。 ) 若要使用此功能,你的应用程序应面向 .NET Framework 3.5 或更高版本。(See Security Issues in Reflection Emit.) To use this functionality, your application should target the .NET Framework 3.5 or later.