次の方法で共有


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 セキュリティ:

参照

AssemblyBuilder クラス | AssemblyBuilder メンバ | System.Reflection.Emit 名前空間 | AssemblyBuilder.DefineResource オーバーロードの一覧