AssemblyBuilder.DefineResource メソッド (String, String, String)
既定のパブリック リソース属性を使用して、このアセンブリのスタンドアロン マネージ リソースを定義します。
Overloads Public Function DefineResource( _
ByVal name As String, _ ByVal description As String, _ ByVal fileName As String _) As IResourceWriter
[C#]
public IResourceWriter DefineResource(stringname,stringdescription,stringfileName);
[C++]
public: IResourceWriter* DefineResource(String* name,String* description,String* fileName);
[JScript]
public function DefineResource(
name : String,description : String,fileName : String) : IResourceWriter;
パラメータ
- name
リソースの論理名。 - description
文章によるリソースの説明。 - fileName
論理名を割り当てる対象の物理ファイル名 (.resources ファイル)。パスを含めないでください。
戻り値
指定したリソースの ResourceWriter オブジェクト。
例外
例外の種類 | 条件 |
---|---|
ArgumentException | name が既に定義されています。
または アセンブリ内に fileName という名前のファイルがもう 1 つあります。 または name の長さが 0 です。 または fileName の長さが 0 です。 または fileName にパスが含まれています。 |
ArgumentNullException | name または fileName が null 参照 (Visual Basic では Nothing) です。 |
SecurityException | 呼び出し元に、必要なアクセス許可がありません。 |
解説
AddResource を呼び出して、返された ResourceWriter に、細かく細分化されたリソースを追加できます。
fileName は、それ以外の持続可能モジュール、スタンドアロン マネージ リソース、またはスタンドアロン マニフェスト ファイルのいずれとも同じにしないでください。
動的アセンブリを保存するときに、Runtime は Close メソッドを呼び出します。
使用例
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 'Main
' 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
[C#]
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());
}
[C++]
#using <mscorlib.dll>
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 = __try_cast<AssemblyBuilder*>(CreateAssembly(Thread::GetDomain())->Assembly);
myResourceWriter = myAssembly->DefineResource(S"myResourceFile",
S"A sample Resource File", S"MyEmitAssembly.MyResource.resources");
myResourceWriter->AddResource(S"AddResource 1", S"First added resource");
myResourceWriter->AddResource(S"AddResource 2", S"Second added resource");
myResourceWriter->AddResource(S"AddResource 3", S"Third added resource");
myAssembly->DefineVersionInfoResource(S"AssemblySample", "2:0:0:1",
S"Microsoft Corporation", S"@Copyright Microsoft Corp. 1990-2001",
S".NET is a trademark of Microsoft Corporation");
myAssembly->Save(S"MyEmitAssembly.dll");
}
// Create the callee transient dynamic assembly.
static Type* CreateAssembly(AppDomain *appDomain)
{
AssemblyName *myAssemblyName = new AssemblyName();
myAssemblyName->Name = S"MyEmitAssembly";
AssemblyBuilder *myAssembly = appDomain->DefineDynamicAssembly(myAssemblyName,
AssemblyBuilderAccess::Save);
ModuleBuilder *myModule = myAssembly->DefineDynamicModule(S"EmittedModule",
S"EmittedModule.mod");
// Define a public class named "HelloWorld" in the assembly.
TypeBuilder *helloWorldClass =
myModule->DefineType(S"HelloWorld", TypeAttributes::Public);
// Define the Display method.
MethodBuilder *myMethod = helloWorldClass->DefineMethod(S"Display",
MethodAttributes::Public, __typeof(String), 0);
// Generate IL for GetGreeting.
ILGenerator *methodIL = myMethod->GetILGenerator();
methodIL->Emit(OpCodes::Ldstr, S"Display method get called.");
methodIL->Emit(OpCodes::Ret);
// Returns the type HelloWorld.
return(helloWorldClass->CreateType());
}
[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ
.NET Framework セキュリティ:
- ReflectionPermission SecurityAction.Demand、ReflectionEmit=true
- ReflectionPermission (Type.InvokeMember などの機構を通じて遅延バインディングで呼び出すときに必要なアクセス許可) ReflectionPermissionFlag.MemberAccess (関連する列挙体)
- FileIOPermission Write=true または Append=true
参照
AssemblyBuilder クラス | AssemblyBuilder メンバ | System.Reflection.Emit 名前空間 | AssemblyBuilder.DefineResource オーバーロードの一覧