AssemblyBuilder.DefineUnmanagedResource メソッド

定義

このアセンブリのアンマネージ リソースを定義します。

オーバーロード

DefineUnmanagedResource(String)

リソース ファイルの名前が指定されたこのアセンブリのアンマネージ リソース ファイルを定義します。

DefineUnmanagedResource(Byte[])

このアセンブリのアンマネージ リソースをバイトの非透過 BLOB として定義します。

DefineUnmanagedResource(String)

リソース ファイルの名前が指定されたこのアセンブリのアンマネージ リソース ファイルを定義します。

C#
public void DefineUnmanagedResource(string resourceFileName);

パラメーター

resourceFileName
String

リソース ファイルの名前。

例外

アンマネージ リソースは、以前に定義されました。

- または -

ファイル resourceFileName を読み取ることができません。

- または -

resourceFileName が空の文字列 ("") です。

resourceFileNamenullです。

resourceFileName が見つかりません。

- または -

resourceFileName はディレクトリです。

呼び出し元に、必要なアクセス許可がありません。

次の例は、 の DefineUnmanagedResource呼び出しで外部リソース ファイルを渡す方法を示しています。

C#
   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);
   }
}

注釈

アセンブリは、1 つのアンマネージド リソースにのみ関連付けることができます。 つまり、いずれかのメソッドが以前に呼び出された後に または DefineUnmanagedResource を呼び出DefineVersionInfoResourceすと、System.ArgumentException がスローされます。 複数のアンマネージド リソースを、Microsoft ResMerge ユーティリティ (共通言語ランタイムでは提供されていません) などのツールとマージする必要があります。

注意

.NET Framework 2.0 Service Pack 1 以降では、このメンバーは フラグを指定するReflectionPermissionFlag.ReflectionEmit必要ReflectionPermissionがなくなりました。 (リフレクション出力のセキュリティの問題に関するページを参照してください)。この機能を使用するには、アプリケーションで .NET Framework 3.5 以降をターゲットにする必要があります。

適用対象

.NET Framework 4.8.1 およびその他のバージョン
製品 バージョン
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

DefineUnmanagedResource(Byte[])

このアセンブリのアンマネージ リソースをバイトの非透過 BLOB として定義します。

C#
public void DefineUnmanagedResource(byte[] resource);

パラメーター

resource
Byte[]

アンマネージ リソースを表すバイトの非透過 BLOB。

例外

アンマネージ リソースは、以前に定義されました。

resourcenullです。

呼び出し元に、必要なアクセス許可がありません。

次のコード サンプルでは、 を使用して DefineUnmanagedResource、アンマネージ リソースを表すバイト配列を作成し、動的アセンブリにアタッチします。

C#
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);
   }
}

注釈

アセンブリは、1 つのアンマネージド リソースにのみ関連付けることができます。 つまり、以前にいずれかのメソッドが呼び出された後に または DefineUnmanagedResource を呼び出DefineVersionInfoResourceすと、スローされる System.ArgumentException がスローされます。 複数のアンマネージド リソースを、Microsoft ResMerge ユーティリティ (共通言語ランタイムでは提供されていません) などのツールとマージする必要があります。

適用対象

.NET Framework 4.8.1 およびその他のバージョン
製品 バージョン
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1