_AppDomain.DefineDynamicAssembly メソッド (AssemblyName, AssemblyBuilderAccess, String, PermissionSet, PermissionSet, PermissionSet)
名前、アクセス モード、ストレージ ディレクトリ、およびアクセス許可要求を指定して、動的アセンブリを定義します。
Function DefineDynamicAssembly( _
ByVal name As AssemblyName, _ ByVal access As AssemblyBuilderAccess, _ ByVal dir As String, _ ByVal requiredPermissions As PermissionSet, _ ByVal optionalPermissions As PermissionSet, _ ByVal refusedPermissions As PermissionSet _) As AssemblyBuilder
[C#]
AssemblyBuilder DefineDynamicAssembly(
AssemblyNamename,AssemblyBuilderAccessaccess,stringdir,PermissionSetrequiredPermissions,PermissionSetoptionalPermissions,PermissionSetrefusedPermissions);
[C++]
AssemblyBuilder* DefineDynamicAssembly(
AssemblyName* name,AssemblyBuilderAccessaccess,String* dir,PermissionSet* requiredPermissions,PermissionSet* optionalPermissions,PermissionSet* refusedPermissions);
[JScript]
function DefineDynamicAssembly(
name : AssemblyName,access : AssemblyBuilderAccess,dir : String,requiredPermissions : PermissionSet,optionalPermissions : PermissionSet,refusedPermissions : PermissionSet) : AssemblyBuilder;
パラメータ
- name
動的アセンブリの一意の ID。 - access
動的アセンブリにアクセスするときのモード。 - dir
アセンブリを保存するディレクトリの名前。 dir が null 参照 (Visual Basic では Nothing) の場合は、現在のディレクトリが既定で使用されます。 - requiredPermissions
必須のアクセス許可要求。 - optionalPermissions
オプションのアクセス許可要求。 - refusedPermissions
拒否されたアクセス許可要求。
戻り値
作成された動的アセンブリを表します。
例外
例外の種類 | 条件 |
---|---|
ArgumentNullException | name が null 参照 (Visual Basic では Nothing) です。 |
ArgumentException | name の Name プロパティが null 参照 (Visual Basic では Nothing) です。
または name の Name プロパティが空白で始まっているか、スラッシュまたは円記号が含まれています。 |
解説
このメソッドは、現在のアプリケーション ドメインで動的アセンブリを定義するためだけに使用してください。詳細については、「 AppDomain.Load メソッド (AssemblyName) 」の解説を参照してください。
name パラメータは、 Version を OperatingSystem コンストラクタのパラメータとして間接的に指定します。ただし、このメソッドでは、ビルド番号とリビジョン番号ではなく、メジャー バージョン番号とマイナ バージョン番号だけが永続化されます。たとえば、 LoadFrom メソッドを使用して、アセンブリに対して指定されたこの Version オブジェクトを間接的に回復した場合、そのオブジェクトのメジャー バージョン番号とマイナ バージョン番号だけが最初に指定されたままの値になります。
使用例
[Visual Basic, C#, C++] DefineDynamicAssembly メソッドおよび AssemblyResolve イベントを次のサンプルで示します。
Imports System
Imports System.Reflection
Imports System.Reflection.Emit
Module Test
Sub Main()
Dim currentDomain As AppDomain = AppDomain.CurrentDomain
InstantiateMyDynamicType(currentDomain) 'Failed!
AddHandler currentDomain.AssemblyResolve, AddressOf MyResolveEventHandler
InstantiateMyDynamicType(currentDomain) 'OK!
End Sub 'Main
Sub InstantiateMyDynamicType(domain As AppDomain)
Try
' You must supply a valid fully qualified assembly name here.
domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType")
Catch e As Exception
Console.WriteLine(e.Message)
End Try
End Sub 'InstantiateMyDynamicType
Function MyResolveEventHandler(sender As Object, args As ResolveEventArgs) As System.Reflection.Assembly
Return DefineDynamicAssembly(DirectCast(sender, AppDomain))
End Function 'MyResolveEventHandler
Function DefineDynamicAssembly(domain As AppDomain) As System.Reflection.Assembly
' Build a dynamic assembly using Reflection Emit API.
Dim assemblyName As New AssemblyName()
assemblyName.Name = "MyDynamicAssembly"
Dim assemblyBuilder As AssemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run)
Dim moduleBuilder As ModuleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule")
Dim typeBuilder As TypeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public)
Dim constructorBuilder As ConstructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Nothing)
Dim ilGenerator As ILGenerator = constructorBuilder.GetILGenerator()
ilGenerator.EmitWriteLine("MyDynamicType instantiated!")
ilGenerator.Emit(OpCodes.Ret)
typeBuilder.CreateType()
Return assemblyBuilder
End Function 'DefineDynamicAssembly
End Module 'Test
[C#]
using System;
using System.Reflection;
using System.Reflection.Emit;
class Test {
public static void Main() {
AppDomain currentDomain = AppDomain.CurrentDomain;
InstantiateMyDynamicType(currentDomain); // Failed!
currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);
InstantiateMyDynamicType(currentDomain); // OK!
}
static void InstantiateMyDynamicType(AppDomain domain) {
try {
// You must supply a valid fully qualified assembly name here.
domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType");
} catch (Exception e) {
Console.WriteLine(e.Message);
}
}
static Assembly MyResolveEventHandler(object sender, ResolveEventArgs args) {
return DefineDynamicAssembly((AppDomain) sender);
}
static Assembly DefineDynamicAssembly(AppDomain domain) {
// Build a dynamic assembly using Reflection Emit API.
AssemblyName assemblyName = new AssemblyName();
assemblyName.Name = "MyDynamicAssembly";
AssemblyBuilder assemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule");
TypeBuilder typeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public);
ConstructorBuilder constructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, null);
ILGenerator ilGenerator = constructorBuilder.GetILGenerator();
ilGenerator.EmitWriteLine("MyDynamicType instantiated!");
ilGenerator.Emit(OpCodes.Ret);
typeBuilder.CreateType();
return assemblyBuilder;
}
}
[C++]
#using <mscorlib.dll>
using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
__gc class Test {
public:
static void InstantiateMyDynamicType(AppDomain* domain) {
try {
// You must supply a valid fully qualified assembly name here.
domain->CreateInstance(S"Assembly text name, Version, Culture, PublicKeyToken", S"MyDynamicType");
} catch (Exception* e) {
Console::WriteLine(e->Message);
}
}
static Assembly* MyResolveEventHandler(Object* sender, ResolveEventArgs* args) {
return DefineDynamicAssembly(dynamic_cast<AppDomain*> (sender));
}
static Assembly* DefineDynamicAssembly(AppDomain* domain) {
// Build a dynamic assembly using Reflection Emit API.
AssemblyName* assemblyName = new AssemblyName();
assemblyName->Name = S"MyDynamicAssembly";
AssemblyBuilder* assemblyBuilder = domain->DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess::Run);
ModuleBuilder* moduleBuilder = assemblyBuilder->DefineDynamicModule(S"MyDynamicModule");
TypeBuilder* typeBuilder = moduleBuilder->DefineType(S"MyDynamicType", TypeAttributes::Public);
ConstructorBuilder* constructorBuilder = typeBuilder->DefineConstructor(MethodAttributes::Public, CallingConventions::Standard, 0);
ILGenerator* ilGenerator = constructorBuilder->GetILGenerator();
ilGenerator->EmitWriteLine(S"MyDynamicType instantiated!");
ilGenerator->Emit(OpCodes::Ret);
typeBuilder->CreateType();
return assemblyBuilder;
}
};
int main() {
AppDomain* currentDomain = AppDomain::CurrentDomain;
Test::InstantiateMyDynamicType(currentDomain); // Failed!
currentDomain->AssemblyResolve += new ResolveEventHandler(0, Test::MyResolveEventHandler);
Test::InstantiateMyDynamicType(currentDomain); // OK!
}
[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 ファミリ
参照
_AppDomain インターフェイス | _AppDomain メンバ | System 名前空間 | _AppDomain.DefineDynamicAssembly オーバーロードの一覧