AppDomain.CreateInstanceAndUnwrap メソッド (String, String)
アセンブリ: mscorlib (mscorlib.dll 内)

Public Function CreateInstanceAndUnwrap ( _ assemblyName As String, _ typeName As String _ ) As Object
Dim instance As AppDomain Dim assemblyName As String Dim typeName As String Dim returnValue As Object returnValue = instance.CreateInstanceAndUnwrap(assemblyName, typeName)
戻り値
typeName で指定したオブジェクトのインスタンス。

例外の種類 | 条件 |
---|---|
ArgumentNullException | assemblyName または typeName が null 参照 (Visual Basic では Nothing) です。 |
MissingMethodException | |
TypeLoadException | |
FileNotFoundException | assemblyName は見つかりませんでした。 |
MethodAccessException | |
AppDomainUnloadedException | 操作が、アンロードされたアプリケーション ドメインで試行されています。 |
BadImageFormatException | |
FileLoadException |

このメソッドは、CreateInstance と ObjectHandle.Unwrap を組み合わせた便利なメソッドです。このメソッドは、typeName の既定のコンストラクタを呼び出します。
assemblyName の書式については、AssemblyName のトピックを参照してください。typeName の形式については、Type.FullName プロパティを参照してください。
![]() |
---|
CreateInstanceAndUnwrap から返された T1 型オブジェクトのメソッド M に対する事前バインディング呼び出しを実行し、そのメソッドが、現在のアセンブリまたは T1 を含むアセンブリ以外のアセンブリ C で T2 型オブジェクトのメソッドに対する事前バインディング呼び出しを実行した場合、アセンブリ C が現在のアプリケーション ドメインに読み込まれます。この読み込みプロセスは、T1.M() に対する事前バインディング呼び出しが DynamicMethod の本体、または動的に生成されたその他のコードで実行された場合にも発生します。現在のドメインが既定のドメインである場合、アセンブリ C は、プロセスが終了するまでアンロードされません。その後、現在のドメインがアセンブリ C を読み込もうとすると、エラーが発生します。 |

Imports System Imports System.IO Imports System.Threading Imports System.Reflection Imports System.Reflection.Emit Imports System.Runtime.Remoting Class ADDyno Public Shared Function CreateADynamicAssembly(ByRef myNewDomain As AppDomain, executableNameNoExe As String) As Type Dim executableName As String = executableNameNoExe + ".exe" Dim myAsmName As New AssemblyName() myAsmName.Name = executableNameNoExe myAsmName.CodeBase = Environment.CurrentDirectory Dim myAsmBuilder As AssemblyBuilder = myNewDomain.DefineDynamicAssembly(myAsmName, AssemblyBuilderAccess.RunAndSave) Console.WriteLine("-- Dynamic Assembly instantiated.") Dim myModBuilder As ModuleBuilder = myAsmBuilder.DefineDynamicModule(executableNameNoExe, executableName) Dim myTypeBuilder As TypeBuilder = myModBuilder.DefineType(executableNameNoExe, TypeAttributes.Public, GetType(MarshalByRefObject)) Dim myFCMethod As MethodBuilder = myTypeBuilder.DefineMethod("CountLocalFiles", MethodAttributes.Public Or MethodAttributes.Static, Nothing, New Type() {}) Dim currentDirGetMI As MethodInfo = GetType(Environment).GetProperty("CurrentDirectory").GetGetMethod() Dim writeLine0objMI As MethodInfo = GetType(Console).GetMethod("WriteLine", New Type() {GetType(String)}) Dim writeLine2objMI As MethodInfo = GetType(Console).GetMethod("WriteLine", New Type() {GetType(String), GetType(Object), GetType(Object)}) Dim getFilesMI As MethodInfo = GetType(Directory).GetMethod("GetFiles", New Type() {GetType(String)}) myFCMethod.InitLocals = True Dim myFCIL As ILGenerator = myFCMethod.GetILGenerator() Console.WriteLine("-- Generating MSIL method body...") Dim v0 As LocalBuilder = myFCIL.DeclareLocal(GetType(String)) Dim v1 As LocalBuilder = myFCIL.DeclareLocal(GetType(Integer)) Dim v2 As LocalBuilder = myFCIL.DeclareLocal(GetType(String)) Dim v3 As LocalBuilder = myFCIL.DeclareLocal(GetType(String())) Dim evalForEachLabel As Label = myFCIL.DefineLabel() Dim topOfForEachLabel As Label = myFCIL.DefineLabel() ' Build the method body. myFCIL.EmitCall(OpCodes.Call, currentDirGetMI, Nothing) myFCIL.Emit(OpCodes.Stloc_S, v0) myFCIL.Emit(OpCodes.Ldc_I4_0) myFCIL.Emit(OpCodes.Stloc_S, v1) myFCIL.Emit(OpCodes.Ldstr, "---") myFCIL.EmitCall(OpCodes.Call, writeLine0objMI, Nothing) myFCIL.Emit(OpCodes.Ldloc_S, v0) myFCIL.EmitCall(OpCodes.Call, getFilesMI, Nothing) myFCIL.Emit(OpCodes.Stloc_S, v3) myFCIL.Emit(OpCodes.Br_S, evalForEachLabel) ' foreach loop starts here. myFCIL.MarkLabel(topOfForEachLabel) ' Load array of strings and index, store value at index for output. myFCIL.Emit(OpCodes.Ldloc_S, v3) myFCIL.Emit(OpCodes.Ldloc_S, v1) myFCIL.Emit(OpCodes.Ldelem_Ref) myFCIL.Emit(OpCodes.Stloc_S, v2) myFCIL.Emit(OpCodes.Ldloc_S, v2) myFCIL.EmitCall(OpCodes.Call, writeLine0objMI, Nothing) ' Increment counter by one. myFCIL.Emit(OpCodes.Ldloc_S, v1) myFCIL.Emit(OpCodes.Ldc_I4_1) myFCIL.Emit(OpCodes.Add) myFCIL.Emit(OpCodes.Stloc_S, v1) ' Determine if end of file list array has been reached. myFCIL.MarkLabel(evalForEachLabel) myFCIL.Emit(OpCodes.Ldloc_S, v1) myFCIL.Emit(OpCodes.Ldloc_S, v3) myFCIL.Emit(OpCodes.Ldlen) myFCIL.Emit(OpCodes.Conv_I4) myFCIL.Emit(OpCodes.Blt_S, topOfForEachLabel) 'foreach loop end here. myFCIL.Emit(OpCodes.Ldstr, "---") myFCIL.EmitCall(OpCodes.Call, writeLine0objMI, Nothing) myFCIL.Emit(OpCodes.Ldstr, "There are {0} files in {1}.") myFCIL.Emit(OpCodes.Ldloc_S, v1) myFCIL.Emit(OpCodes.Box, GetType(Integer)) myFCIL.Emit(OpCodes.Ldloc_S, v0) myFCIL.EmitCall(OpCodes.Call, writeLine2objMI, Nothing) myFCIL.Emit(OpCodes.Ret) Dim myType As Type = myTypeBuilder.CreateType() myAsmBuilder.SetEntryPoint(myFCMethod) myAsmBuilder.Save(executableName) Console.WriteLine("-- Method generated, type completed, and assembly saved to disk.") Return myType End Function 'CreateADynamicAssembly Public Shared Sub Main() Dim executableName As String = Nothing Dim domainDir As String Console.Write("Enter a name for the file counting assembly: ") Dim executableNameNoExe As String = Console.ReadLine() executableName = executableNameNoExe + ".exe" Console.WriteLine("---") domainDir = Environment.CurrentDirectory Dim curDomain As AppDomain = Thread.GetDomain() ' Create a new AppDomain, with the current directory as the base. Console.WriteLine("Current Directory: {0}", Environment.CurrentDirectory) Dim mySetupInfo As New AppDomainSetup() mySetupInfo.ApplicationBase = domainDir mySetupInfo.ApplicationName = executableNameNoExe mySetupInfo.LoaderOptimization = LoaderOptimization.SingleDomain Dim myDomain As AppDomain = AppDomain.CreateDomain(executableNameNoExe, Nothing, mySetupInfo) Console.WriteLine("Creating a new AppDomain '{0}'...", executableNameNoExe) Console.WriteLine("-- Base Directory = '{0}'", myDomain.BaseDirectory) Console.WriteLine("-- Shadow Copy? = '{0}'", myDomain.ShadowCopyFiles) Console.WriteLine("---") Dim myFCType As Type = CreateADynamicAssembly(curDomain, executableNameNoExe) Console.WriteLine("Loading '{0}' from '{1}'...", executableName, myDomain.BaseDirectory.ToString()) Dim bFlags As BindingFlags = BindingFlags.Public Or BindingFlags.CreateInstance Or BindingFlags.Instance Dim myObjInstance As [Object] = myDomain.CreateInstanceAndUnwrap(executableNameNoExe, executableNameNoExe, False, bFlags, Nothing, Nothing, Nothing, Nothing, Nothing) Console.WriteLine("Executing method 'CountLocalFiles' in {0}...", myObjInstance.ToString()) myFCType.InvokeMember("CountLocalFiles", BindingFlags.InvokeMethod, Nothing, myObjInstance, New Object() {}) End Sub 'Main End Class 'ADDyno
using System; using System.IO; using System.Threading; using System.Reflection; using System.Reflection.Emit; using System.Runtime.Remoting; class ADDyno { public static Type CreateADynamicAssembly(ref AppDomain myNewDomain, string executableNameNoExe) { string executableName = executableNameNoExe + ".exe"; AssemblyName myAsmName = new AssemblyName(); myAsmName.Name = executableNameNoExe; myAsmName.CodeBase = Environment.CurrentDirectory; AssemblyBuilder myAsmBuilder = myNewDomain.DefineDynamicAssembly(myAsmName, AssemblyBuilderAccess.RunAndSave); Console.WriteLine("-- Dynamic Assembly instantiated."); ModuleBuilder myModBuilder = myAsmBuilder.DefineDynamicModule(executableNameNoExe , executableName); TypeBuilder myTypeBuilder = myModBuilder.DefineType(executableNameNoExe, TypeAttributes.Public, typeof(MarshalByRefObject)); MethodBuilder myFCMethod = myTypeBuilder.DefineMethod("CountLocalFiles" , MethodAttributes.Public | MethodAttributes.Static, null, new Type[] { }); MethodInfo currentDirGetMI = typeof(Environment).GetProperty("CurrentDirectory").GetGetMethod(); MethodInfo writeLine0objMI = typeof(Console).GetMethod("WriteLine" , new Type[] { typeof(string) }); MethodInfo writeLine2objMI = typeof(Console).GetMethod("WriteLine" , new Type[] { typeof(string), typeof(object), typeof(object) }); MethodInfo getFilesMI = typeof(Directory).GetMethod("GetFiles", new Type[] { typeof(string) }); myFCMethod.InitLocals = true; ILGenerator myFCIL = myFCMethod.GetILGenerator(); Console.WriteLine("-- Generating MSIL method body..."); LocalBuilder v0 = myFCIL.DeclareLocal(typeof(string)); LocalBuilder v1 = myFCIL.DeclareLocal(typeof(int)); LocalBuilder v2 = myFCIL.DeclareLocal(typeof(string)); LocalBuilder v3 = myFCIL.DeclareLocal(typeof(string[])); Label evalForEachLabel = myFCIL.DefineLabel(); Label topOfForEachLabel = myFCIL.DefineLabel(); // Build the method body. myFCIL.EmitCall(OpCodes.Call, currentDirGetMI, null); myFCIL.Emit(OpCodes.Stloc_S, v0); myFCIL.Emit(OpCodes.Ldc_I4_0); myFCIL.Emit(OpCodes.Stloc_S, v1); myFCIL.Emit(OpCodes.Ldstr, "---"); myFCIL.EmitCall(OpCodes.Call, writeLine0objMI, null); myFCIL.Emit(OpCodes.Ldloc_S, v0); myFCIL.EmitCall(OpCodes.Call, getFilesMI, null); myFCIL.Emit(OpCodes.Stloc_S, v3); myFCIL.Emit(OpCodes.Br_S, evalForEachLabel); // foreach loop starts here. myFCIL.MarkLabel(topOfForEachLabel); // Load array of strings and index, store value at index for output. myFCIL.Emit(OpCodes.Ldloc_S, v3); myFCIL.Emit(OpCodes.Ldloc_S, v1); myFCIL.Emit(OpCodes.Ldelem_Ref); myFCIL.Emit(OpCodes.Stloc_S, v2); myFCIL.Emit(OpCodes.Ldloc_S, v2); myFCIL.EmitCall(OpCodes.Call, writeLine0objMI, null); // Increment counter by one. myFCIL.Emit(OpCodes.Ldloc_S, v1); myFCIL.Emit(OpCodes.Ldc_I4_1); myFCIL.Emit(OpCodes.Add); myFCIL.Emit(OpCodes.Stloc_S, v1); // Determine if end of file list array has been reached. myFCIL.MarkLabel(evalForEachLabel); myFCIL.Emit(OpCodes.Ldloc_S, v1); myFCIL.Emit(OpCodes.Ldloc_S, v3); myFCIL.Emit(OpCodes.Ldlen); myFCIL.Emit(OpCodes.Conv_I4); myFCIL.Emit(OpCodes.Blt_S, topOfForEachLabel); //foreach loop end here. myFCIL.Emit(OpCodes.Ldstr, "---"); myFCIL.EmitCall(OpCodes.Call, writeLine0objMI, null); myFCIL.Emit(OpCodes.Ldstr, "There are {0} files in {1}."); myFCIL.Emit(OpCodes.Ldloc_S, v1); myFCIL.Emit(OpCodes.Box, typeof(int)); myFCIL.Emit(OpCodes.Ldloc_S, v0); myFCIL.EmitCall(OpCodes.Call, writeLine2objMI, null); myFCIL.Emit(OpCodes.Ret); Type myType = myTypeBuilder.CreateType(); myAsmBuilder.SetEntryPoint(myFCMethod); myAsmBuilder.Save(executableName); Console.WriteLine("-- Method generated, type completed, and assembly saved to disk."); return myType; } public static void Main() { string domainDir, executableName = null; Console.Write("Enter a name for the file counting assembly: "); string executableNameNoExe = Console.ReadLine(); executableName = executableNameNoExe + ".exe"; Console.WriteLine("---"); domainDir = Environment.CurrentDirectory; AppDomain curDomain = Thread.GetDomain(); // Create a new AppDomain, with the current directory as the base. Console.WriteLine("Current Directory: {0}", Environment.CurrentDirectory); AppDomainSetup mySetupInfo = new AppDomainSetup(); mySetupInfo.ApplicationBase = domainDir; mySetupInfo.ApplicationName = executableNameNoExe; mySetupInfo.LoaderOptimization = LoaderOptimization.SingleDomain; AppDomain myDomain = AppDomain.CreateDomain(executableNameNoExe, null, mySetupInfo); Console.WriteLine("Creating a new AppDomain '{0}'..." , executableNameNoExe); Console.WriteLine("-- Base Directory = '{0}'", myDomain.BaseDirectory); Console.WriteLine("-- Shadow Copy? = '{0}'", myDomain.ShadowCopyFiles); Console.WriteLine("---"); Type myFCType = CreateADynamicAssembly(ref curDomain, executableNameNoExe); Console.WriteLine("Loading '{0}' from '{1}'...", executableName, myDomain.BaseDirectory.ToString()); BindingFlags bFlags = (BindingFlags.Public | BindingFlags.CreateInstance | BindingFlags.Instance); Object myObjInstance = myDomain.CreateInstanceAndUnwrap(executableNameNoExe, executableNameNoExe, false, bFlags, null, null, null, null, null); Console.WriteLine("Executing method 'CountLocalFiles' in {0}...", myObjInstance.ToString()); myFCType.InvokeMember("CountLocalFiles", BindingFlags.InvokeMethod, null, myObjInstance, new object[] { }); } }
using namespace System; using namespace System::IO; using namespace System::Threading; using namespace System::Reflection; using namespace System::Reflection::Emit; using namespace System::Runtime::Remoting; ref class ADDyno { public: static Type^ CreateADynamicAssembly( interior_ptr<AppDomain^> myNewDomain, String^ executableNameNoExe ) { String^ executableName = String::Concat( executableNameNoExe, ".exe" ); AssemblyName^ myAsmName = gcnew AssemblyName; myAsmName->Name = executableNameNoExe; myAsmName->CodeBase = Environment::CurrentDirectory; AssemblyBuilder^ myAsmBuilder = ( *myNewDomain)->DefineDynamicAssembly( myAsmName, AssemblyBuilderAccess::RunAndSave ); Console::WriteLine( "-- Dynamic Assembly instantiated." ); ModuleBuilder^ myModBuilder = myAsmBuilder->DefineDynamicModule( executableNameNoExe, executableName ); TypeBuilder^ myTypeBuilder = myModBuilder->DefineType( executableNameNoExe, TypeAttributes::Public, MarshalByRefObject::typeid ); array<Type^>^temp0 = nullptr; MethodBuilder^ myFCMethod = myTypeBuilder->DefineMethod( "CountLocalFiles", static_cast<MethodAttributes>(MethodAttributes::Public | MethodAttributes::Static), nullptr, temp0 ); MethodInfo^ currentDirGetMI = Environment::typeid->GetProperty( "CurrentDirectory" )->GetGetMethod(); array<Type^>^temp1 = {String::typeid}; MethodInfo^ writeLine0objMI = Console::typeid->GetMethod( "WriteLine", temp1 ); array<Type^>^temp2 = {String::typeid,Object::typeid,Object::typeid}; MethodInfo^ writeLine2objMI = Console::typeid->GetMethod( "WriteLine", temp2 ); array<Type^>^temp3 = {String::typeid}; MethodInfo^ getFilesMI = Directory::typeid->GetMethod( "GetFiles", temp3 ); myFCMethod->InitLocals = true; ILGenerator^ myFCIL = myFCMethod->GetILGenerator(); Console::WriteLine( "-- Generating MSIL method body..." ); LocalBuilder^ v0 = myFCIL->DeclareLocal( String::typeid ); LocalBuilder^ v1 = myFCIL->DeclareLocal( int::typeid ); LocalBuilder^ v2 = myFCIL->DeclareLocal( String::typeid ); LocalBuilder^ v3 = myFCIL->DeclareLocal( array<String^>::typeid ); Label evalForEachLabel = myFCIL->DefineLabel(); Label topOfForEachLabel = myFCIL->DefineLabel(); // Build the method body. myFCIL->EmitCall( OpCodes::Call, currentDirGetMI, nullptr ); myFCIL->Emit( OpCodes::Stloc_S, v0 ); myFCIL->Emit( OpCodes::Ldc_I4_0 ); myFCIL->Emit( OpCodes::Stloc_S, v1 ); myFCIL->Emit( OpCodes::Ldstr, "---" ); myFCIL->EmitCall( OpCodes::Call, writeLine0objMI, nullptr ); myFCIL->Emit( OpCodes::Ldloc_S, v0 ); myFCIL->EmitCall( OpCodes::Call, getFilesMI, nullptr ); myFCIL->Emit( OpCodes::Stloc_S, v3 ); myFCIL->Emit( OpCodes::Br_S, evalForEachLabel ); // foreach loop starts here. myFCIL->MarkLabel( topOfForEachLabel ); // Load array of strings and index, store value at index for output. myFCIL->Emit( OpCodes::Ldloc_S, v3 ); myFCIL->Emit( OpCodes::Ldloc_S, v1 ); myFCIL->Emit( OpCodes::Ldelem_Ref ); myFCIL->Emit( OpCodes::Stloc_S, v2 ); myFCIL->Emit( OpCodes::Ldloc_S, v2 ); myFCIL->EmitCall( OpCodes::Call, writeLine0objMI, nullptr ); // Increment counter by one. myFCIL->Emit( OpCodes::Ldloc_S, v1 ); myFCIL->Emit( OpCodes::Ldc_I4_1 ); myFCIL->Emit( OpCodes::Add ); myFCIL->Emit( OpCodes::Stloc_S, v1 ); // Determine if end of file list array has been reached. myFCIL->MarkLabel( evalForEachLabel ); myFCIL->Emit( OpCodes::Ldloc_S, v1 ); myFCIL->Emit( OpCodes::Ldloc_S, v3 ); myFCIL->Emit( OpCodes::Ldlen ); myFCIL->Emit( OpCodes::Conv_I4 ); myFCIL->Emit( OpCodes::Blt_S, topOfForEachLabel ); //foreach loop end here. myFCIL->Emit( OpCodes::Ldstr, "---" ); myFCIL->EmitCall( OpCodes::Call, writeLine0objMI, nullptr ); myFCIL->Emit( OpCodes::Ldstr, "There are {0} files in {1}." ); myFCIL->Emit( OpCodes::Ldloc_S, v1 ); myFCIL->Emit( OpCodes::Box, int::typeid ); myFCIL->Emit( OpCodes::Ldloc_S, v0 ); myFCIL->EmitCall( OpCodes::Call, writeLine2objMI, nullptr ); myFCIL->Emit( OpCodes::Ret ); Type^ myType = myTypeBuilder->CreateType(); myAsmBuilder->SetEntryPoint( myFCMethod ); myAsmBuilder->Save( executableName ); Console::WriteLine( "-- Method generated, type completed, and assembly saved to disk." ); return myType; } }; int main() { String^ domainDir; String^ executableName = nullptr; Console::Write( "Enter a name for the file counting assembly: " ); String^ executableNameNoExe = Console::ReadLine(); executableName = String::Concat( executableNameNoExe, ".exe" ); Console::WriteLine( "---" ); domainDir = Environment::CurrentDirectory; AppDomain^ curDomain = Thread::GetDomain(); // Create a new AppDomain, with the current directory as the base. Console::WriteLine( "Current Directory: {0}", Environment::CurrentDirectory ); AppDomainSetup^ mySetupInfo = gcnew AppDomainSetup; mySetupInfo->ApplicationBase = domainDir; mySetupInfo->ApplicationName = executableNameNoExe; mySetupInfo->LoaderOptimization = LoaderOptimization::SingleDomain; AppDomain^ myDomain = AppDomain::CreateDomain( executableNameNoExe, nullptr, mySetupInfo ); Console::WriteLine( "Creating a new AppDomain '{0}'...", executableNameNoExe ); Console::WriteLine( "-- Base Directory = '{0}'", myDomain->BaseDirectory ); Console::WriteLine( "-- Shadow Copy? = '{0}'", myDomain->ShadowCopyFiles ); Console::WriteLine( "---" ); Type^ myFCType = ADDyno::CreateADynamicAssembly( &curDomain, executableNameNoExe ); Console::WriteLine( "Loading '{0}' from '{1}'...", executableName, myDomain->BaseDirectory ); BindingFlags bFlags = static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::CreateInstance | BindingFlags::Instance); Object^ myObjInstance = myDomain->CreateInstanceAndUnwrap( executableNameNoExe, executableNameNoExe, false, bFlags, nullptr, nullptr, nullptr, nullptr, nullptr ); Console::WriteLine( "Executing method 'CountLocalFiles' in {0}...", myObjInstance ); array<Object^>^temp4 = nullptr; myFCType->InvokeMember( "CountLocalFiles", BindingFlags::InvokeMethod, nullptr, myObjInstance, temp4 ); }
import System.*; import System.IO.*; import System.Threading.*; import System.Reflection.*; import System.Reflection.Emit.*; import System.Runtime.Remoting.*; class ADDyno { public static Type CreateADynamicAssembly(AppDomain myNewDomain, String executableNameNoExe) { String executableName = executableNameNoExe + ".exe"; AssemblyName myAsmName = new AssemblyName(); myAsmName.set_Name(executableNameNoExe); myAsmName.set_CodeBase(Environment.get_CurrentDirectory()); AssemblyBuilder myAsmBuilder = myNewDomain.DefineDynamicAssembly(myAsmName, AssemblyBuilderAccess.RunAndSave); Console.WriteLine("-- Dynamic Assembly instantiated."); ModuleBuilder myModBuilder = myAsmBuilder.DefineDynamicModule(executableNameNoExe, executableName); TypeBuilder myTypeBuilder = myModBuilder.DefineType(executableNameNoExe, TypeAttributes.Public, MarshalByRefObject.class.ToType()); MethodBuilder myFCMethod = myTypeBuilder.DefineMethod("CountLocalFiles" , MethodAttributes.Public | MethodAttributes.Static, null, new Type[]{}); MethodInfo currentDirGetMI = Environment.class.ToType(). GetProperty("CurrentDirectory").GetGetMethod(); MethodInfo writeLine0ObjMI = Console.class.ToType(). GetMethod("WriteLine", new Type[]{String.class.ToType()}); MethodInfo writeLine2ObjMI = Console.class.ToType(). GetMethod("WriteLine", new Type[]{String.class.ToType(), Object.class.ToType(), Object.class.ToType()}); MethodInfo getFilesMI = Directory.class.ToType().GetMethod("GetFiles", new Type[]{String.class.ToType()}); myFCMethod.set_InitLocals(true); ILGenerator myFCIL = myFCMethod.GetILGenerator(); Console.WriteLine("-- Generating MSIL method body..."); LocalBuilder v0 = myFCIL.DeclareLocal(String.class.ToType()); LocalBuilder v1 = myFCIL.DeclareLocal(int.class.ToType()); LocalBuilder v2 = myFCIL.DeclareLocal(String.class.ToType()); LocalBuilder v3 = myFCIL.DeclareLocal(String[].class.ToType()); Label evalForEachLabel = myFCIL.DefineLabel(); Label topOfForEachLabel = myFCIL.DefineLabel(); // Build the method body. myFCIL.EmitCall(OpCodes.Call, currentDirGetMI, null); myFCIL.Emit(OpCodes.Stloc_S, v0); myFCIL.Emit(OpCodes.Ldc_I4_0); myFCIL.Emit(OpCodes.Stloc_S, v1); myFCIL.Emit(OpCodes.Ldstr, "---"); myFCIL.EmitCall(OpCodes.Call, writeLine0ObjMI, null); myFCIL.Emit(OpCodes.Ldloc_S, v0); myFCIL.EmitCall(OpCodes.Call, getFilesMI, null); myFCIL.Emit(OpCodes.Stloc_S, v3); myFCIL.Emit(OpCodes.Br_S, evalForEachLabel); // foreach loop starts here. myFCIL.MarkLabel(topOfForEachLabel); // Load array of strings and index, store value at index for output. myFCIL.Emit(OpCodes.Ldloc_S, v3); myFCIL.Emit(OpCodes.Ldloc_S, v1); myFCIL.Emit(OpCodes.Ldelem_Ref); myFCIL.Emit(OpCodes.Stloc_S, v2); myFCIL.Emit(OpCodes.Ldloc_S, v2); myFCIL.EmitCall(OpCodes.Call, writeLine0ObjMI, null); // Increment counter by one. myFCIL.Emit(OpCodes.Ldloc_S, v1); myFCIL.Emit(OpCodes.Ldc_I4_1); myFCIL.Emit(OpCodes.Add); myFCIL.Emit(OpCodes.Stloc_S, v1); // Determine if end of file list array has been reached. myFCIL.MarkLabel(evalForEachLabel); myFCIL.Emit(OpCodes.Ldloc_S, v1); myFCIL.Emit(OpCodes.Ldloc_S, v3); myFCIL.Emit(OpCodes.Ldlen); myFCIL.Emit(OpCodes.Conv_I4); myFCIL.Emit(OpCodes.Blt_S, topOfForEachLabel); //foreach loop end here. myFCIL.Emit(OpCodes.Ldstr, "---"); myFCIL.EmitCall(OpCodes.Call, writeLine0ObjMI, null); myFCIL.Emit(OpCodes.Ldstr, "There are {0} files in {1}."); myFCIL.Emit(OpCodes.Ldloc_S, v1); myFCIL.Emit(OpCodes.Box, int.class.ToType()); myFCIL.Emit(OpCodes.Ldloc_S, v0); myFCIL.EmitCall(OpCodes.Call, writeLine2ObjMI, null); myFCIL.Emit(OpCodes.Ret); Type myType = myTypeBuilder.CreateType(); myAsmBuilder.SetEntryPoint(myFCMethod); myAsmBuilder.Save(executableName); Console.WriteLine("-- Method generated, type completed, " + "and assembly saved to disk."); return myType; } //CreateADynamicAssembly public static void main(String[] args) { String executableName = null; String domainDir; Console.Write("Enter a name for the file counting assembly: "); String executableNameNoExe = Console.ReadLine(); executableName = executableNameNoExe + ".exe"; Console.WriteLine("---"); domainDir = Environment.get_CurrentDirectory(); AppDomain curDomain = System.Threading.Thread.GetDomain(); // Create a new AppDomain, with the current directory as the base. Console.WriteLine("Current Directory: {0}", Environment.get_CurrentDirectory()); AppDomainSetup mySetupInfo = new AppDomainSetup(); mySetupInfo.set_ApplicationBase(domainDir); mySetupInfo.set_ApplicationName(executableNameNoExe); mySetupInfo.set_LoaderOptimization(LoaderOptimization.SingleDomain); AppDomain myDomain = AppDomain.CreateDomain(executableNameNoExe, null, mySetupInfo); Console.WriteLine("Creating a new AppDomain '{0}'..." , executableNameNoExe); Console.WriteLine("-- Base Directory = '{0}'", myDomain.get_BaseDirectory()); Console.WriteLine("-- Shadow Copy? = '{0}'", (System.Boolean)myDomain.get_ShadowCopyFiles()); Console.WriteLine("---"); Type myFCType = CreateADynamicAssembly(curDomain, executableNameNoExe); Console.WriteLine("Loading '{0}' from '{1}'...", executableName, myDomain.get_BaseDirectory().ToString()); BindingFlags bFlags = BindingFlags.Public | BindingFlags.CreateInstance | BindingFlags.Instance; Object myObjInstance = myDomain.CreateInstanceAndUnwrap(executableNameNoExe, executableNameNoExe, false, bFlags, null, null, null, null, null); Console.WriteLine("Executing method 'CountLocalFiles' in {0}...", myObjInstance.ToString()); myFCType.InvokeMember("CountLocalFiles", BindingFlags.InvokeMethod, null, myObjInstance, new Object[]{}); } //main } //ADDyno

- FileIOPermissionAccess (コードベースが構成ファイルで指定されている場合にアセンブリの場所にアクセスするために必要なアクセス許可)。FileIOPermissionAccess.PathDiscovery (関連する列挙体)
- FileIOPermissionAccess (アセンブリ マニフェストを格納しているファイルを読み取るために必要なアクセス許可、またはマニフェスト ファイル以外のモジュールから型を作成している場合に必要なアクセス許可)。FileIOPermissionAccess.Read (関連する列挙体)
- WebPermission (アセンブリがローカルにない場合にアセンブリの場所にアクセスするために必要なアクセス許可)。

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


AppDomain.CreateInstanceAndUnwrap メソッド (String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[], Evidence)
アセンブリ: mscorlib (mscorlib.dll 内)

Public Function CreateInstanceAndUnwrap ( _ assemblyName As String, _ typeName As String, _ ignoreCase As Boolean, _ bindingAttr As BindingFlags, _ binder As Binder, _ args As Object(), _ culture As CultureInfo, _ activationAttributes As Object(), _ securityAttributes As Evidence _ ) As Object
Dim instance As AppDomain Dim assemblyName As String Dim typeName As String Dim ignoreCase As Boolean Dim bindingAttr As BindingFlags Dim binder As Binder Dim args As Object() Dim culture As CultureInfo Dim activationAttributes As Object() Dim securityAttributes As Evidence Dim returnValue As Object returnValue = instance.CreateInstanceAndUnwrap(assemblyName, typeName, ignoreCase, bindingAttr, binder, args, culture, activationAttributes, securityAttributes)
public Object CreateInstanceAndUnwrap ( string assemblyName, string typeName, bool ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, Evidence securityAttributes )
public: Object^ CreateInstanceAndUnwrap ( String^ assemblyName, String^ typeName, bool ignoreCase, BindingFlags bindingAttr, Binder^ binder, array<Object^>^ args, CultureInfo^ culture, array<Object^>^ activationAttributes, Evidence^ securityAttributes )
public Object CreateInstanceAndUnwrap ( String assemblyName, String typeName, boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, Evidence securityAttributes )
public function CreateInstanceAndUnwrap ( assemblyName : String, typeName : String, ignoreCase : boolean, bindingAttr : BindingFlags, binder : Binder, args : Object[], culture : CultureInfo, activationAttributes : Object[], securityAttributes : Evidence ) : Object
- bindingAttr
typeName コンストラクタの検索に影響を与える 0 個以上のビット フラグの組み合わせ。bindingAttr が 0 の場合は、大文字と小文字を区別してパブリック コンストラクタを検索します。
- binder
バインディング、引数型の強制変換、メンバの呼び出し、および、リフレクションを使用した MemberInfo オブジェクトの取得を有効にするオブジェクト。binder が null の場合は、既定のバインダが使用されます。
- args
コンストラクタに渡される引数。この引数の配列は、呼び出すコンストラクタのパラメータに対して、数、順序、および型を一致させる必要があります。既定のコンストラクタを優先する場合は、args を空の配列または null にする必要があります。
- culture
型の強制変換を制御するために使用するカルチャ固有のオブジェクト。culture が null 参照 (Visual Basic では Nothing) の場合は、現在のスレッドの CultureInfo が使用されます。
typeName で指定したオブジェクトのインスタンス。

例外の種類 | 条件 |
---|---|
ArgumentNullException | assemblyName または typeName が null 参照 (Visual Basic では Nothing) です。 |
MissingMethodException | |
TypeLoadException | |
FileNotFoundException | assemblyName は見つかりませんでした。 |
MethodAccessException | |
NotSupportedException | MarshalByRefObject から継承されていないオブジェクトに対して、呼び出し元がアクティベーション属性を与えることはできません。 |
AppDomainUnloadedException | 操作が、アンロードされたアプリケーション ドメインで試行されています。 |
BadImageFormatException | |
FileLoadException |

このメソッドは、CreateInstance と ObjectHandle.Unwrap を組み合わせた便利なメソッドです。このメソッドは、typeName の既定のコンストラクタを呼び出します。
assemblyName の書式については、AssemblyName のトピックを参照してください。typeName の形式については、Type.FullName プロパティを参照してください。
![]() |
---|
CreateInstanceAndUnwrap から返された T1 型オブジェクトのメソッド M に対する事前バインディング呼び出しを実行し、そのメソッドが、現在のアセンブリまたは T1 を含むアセンブリ以外のアセンブリ C で T2 型オブジェクトのメソッドに対する事前バインディング呼び出しを実行した場合、アセンブリ C が現在のアプリケーション ドメインに読み込まれます。この読み込みプロセスは、T1.M() に対する事前バインディング呼び出しが DynamicMethod の本体、または動的に生成されたその他のコードで実行された場合にも発生します。現在のドメインが既定のドメインである場合、アセンブリ C は、プロセスが終了するまでアンロードされません。その後、現在のドメインがアセンブリ C を読み込もうとすると、エラーが発生します。 |

ignoreCase パラメータの使用方法を次の例に示します。
Imports System Imports System.Reflection Module Test Sub Main() InstantiateINT32(False) ' Failed! InstantiateINT32(True) ' OK! End Sub 'Main Sub InstantiateINT32(ignoreCase As Boolean) Try Dim currentDomain As AppDomain = AppDomain.CurrentDomain Dim instance As Object = currentDomain.CreateInstanceAndUnwrap( _ "mscorlib", _ "SYSTEM.INT32", _ ignoreCase, _ BindingFlags.Default, _ Nothing, _ Nothing, _ Nothing, _ Nothing, _ Nothing _ ) Console.WriteLine(instance.GetType()) Catch e As TypeLoadException Console.WriteLine(e.Message) End Try End Sub 'InstantiateINT32 End Module 'Test
using System; using System.Reflection; class Test { static void Main() { InstantiateINT32(false); // Failed! InstantiateINT32(true); // OK! } static void InstantiateINT32(bool ignoreCase) { try { AppDomain currentDomain = AppDomain.CurrentDomain; object instance = currentDomain.CreateInstanceAndUnwrap( "mscorlib", "SYSTEM.INT32", ignoreCase, BindingFlags.Default, null, null, null, null, null ); Console.WriteLine(instance.GetType()); } catch (TypeLoadException e) { Console.WriteLine(e.Message); } } }
using namespace System; using namespace System::Reflection; static void InstantiateINT32( bool ignoreCase ) { try { AppDomain^ currentDomain = AppDomain::CurrentDomain; Object^ instance = currentDomain->CreateInstanceAndUnwrap( "mscorlib", "SYSTEM.INT32", ignoreCase, BindingFlags::Default, nullptr, nullptr, nullptr, nullptr, nullptr ); Console::WriteLine( instance->GetType() ); } catch ( TypeLoadException^ e ) { Console::WriteLine( e->Message ); } } int main() { InstantiateINT32( false ); // Failed! InstantiateINT32( true ); // OK! }
import System.*; import System.Reflection.*; class Test { public static void main(String[] args) { InstantiateInt32(false); // Failed! InstantiateInt32(true); // OK! } //main static void InstantiateInt32(boolean ignoreCase) { try { AppDomain currentDomain = AppDomain.get_CurrentDomain(); Object instance = currentDomain.CreateInstanceAndUnwrap("mscorlib", "SYSTEM.INT32", ignoreCase, BindingFlags.Default, null, null, null, null, null); Console.WriteLine(instance.GetType()); } catch (TypeLoadException e) { Console.WriteLine(e.get_Message()); } } //InstantiateInt32 } //Test

- FileIOPermissionAccess (アセンブリの場所にアクセスするために必要なアクセス許可)。FileIOPermissionAccess.PathDiscovery (関連する列挙体)
- FileIOPermissionAccess (アセンブリ マニフェストを格納しているファイルを読み取るために必要なアクセス許可)。FileIOPermissionAccess.Read (関連する列挙体)
- WebPermission (アセンブリがローカルにない場合にアセンブリの場所にアクセスするために必要なアクセス許可)。
- SecurityPermission (デリゲートのインスタンスの作成時にアンマネージ コードを呼び出すために必要なアクセス許可)。SecurityPermissionFlag.UnmanagedCode (関連する列挙体)
- SecurityPermission (証拠が指定されたアセンブリを読み込むために必要なアクセス許可)。SecurityPermissionFlag.ControlEvidence (関連する列挙体)
- ReflectionPermission (すべての型のメンバに対して操作を呼び出すために必要なアクセス許可)。ReflectionPermissionFlag.MemberAccess (関連する列挙体)

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


AppDomain.CreateInstanceAndUnwrap メソッド (String, String, Object[])
アセンブリ: mscorlib (mscorlib.dll 内)

Public Function CreateInstanceAndUnwrap ( _ assemblyName As String, _ typeName As String, _ activationAttributes As Object() _ ) As Object
Dim instance As AppDomain Dim assemblyName As String Dim typeName As String Dim activationAttributes As Object() Dim returnValue As Object returnValue = instance.CreateInstanceAndUnwrap(assemblyName, typeName, activationAttributes)
public Object CreateInstanceAndUnwrap ( string assemblyName, string typeName, Object[] activationAttributes )
public: Object^ CreateInstanceAndUnwrap ( String^ assemblyName, String^ typeName, array<Object^>^ activationAttributes )
public Object CreateInstanceAndUnwrap ( String assemblyName, String typeName, Object[] activationAttributes )
public function CreateInstanceAndUnwrap ( assemblyName : String, typeName : String, activationAttributes : Object[] ) : Object
戻り値
typeName で指定したオブジェクトのインスタンス。

例外の種類 | 条件 |
---|---|
ArgumentNullException | assemblyName または typeName が null 参照 (Visual Basic では Nothing) です。 |
MissingMethodException | |
TypeLoadException | |
FileNotFoundException | assemblyName は見つかりませんでした。 |
MethodAccessException | |
NotSupportedException | MarshalByRefObject から継承されていないオブジェクトに対して、呼び出し元がアクティベーション属性を与えることはできません。 |
AppDomainUnloadedException | 操作が、アンロードされたアプリケーション ドメインで試行されています。 |
BadImageFormatException | |
FileLoadException |

このメソッドは、CreateInstance と ObjectHandle.Unwrap を組み合わせた便利なメソッドです。このメソッドは、typeName の既定のコンストラクタを呼び出します。
assemblyName の書式については、AssemblyName のトピックを参照してください。typeName の形式については、Type.FullName プロパティを参照してください。
![]() |
---|
CreateInstanceAndUnwrap から返された T1 型オブジェクトのメソッド M に対する事前バインディング呼び出しを実行し、そのメソッドが、現在のアセンブリまたは T1 を含むアセンブリ以外のアセンブリ C で T2 型オブジェクトのメソッドに対する事前バインディング呼び出しを実行した場合、アセンブリ C が現在のアプリケーション ドメインに読み込まれます。この読み込みプロセスは、T1.M() に対する事前バインディング呼び出しが DynamicMethod の本体、または動的に生成されたその他のコードで実行された場合にも発生します。現在のドメインが既定のドメインである場合、アセンブリ C は、プロセスが終了するまでアンロードされません。その後、現在のドメインがアセンブリ C を読み込もうとすると、エラーが発生します。 |

Imports System Imports System.IO Imports System.Threading Imports System.Reflection Imports System.Reflection.Emit Imports System.Runtime.Remoting Class ADDyno Public Shared Function CreateADynamicAssembly(ByRef myNewDomain As AppDomain, executableNameNoExe As String) As Type Dim executableName As String = executableNameNoExe + ".exe" Dim myAsmName As New AssemblyName() myAsmName.Name = executableNameNoExe myAsmName.CodeBase = Environment.CurrentDirectory Dim myAsmBuilder As AssemblyBuilder = myNewDomain.DefineDynamicAssembly(myAsmName, AssemblyBuilderAccess.RunAndSave) Console.WriteLine("-- Dynamic Assembly instantiated.") Dim myModBuilder As ModuleBuilder = myAsmBuilder.DefineDynamicModule(executableNameNoExe, executableName) Dim myTypeBuilder As TypeBuilder = myModBuilder.DefineType(executableNameNoExe, TypeAttributes.Public, GetType(MarshalByRefObject)) Dim myFCMethod As MethodBuilder = myTypeBuilder.DefineMethod("CountLocalFiles", MethodAttributes.Public Or MethodAttributes.Static, Nothing, New Type() {}) Dim currentDirGetMI As MethodInfo = GetType(Environment).GetProperty("CurrentDirectory").GetGetMethod() Dim writeLine0objMI As MethodInfo = GetType(Console).GetMethod("WriteLine", New Type() {GetType(String)}) Dim writeLine2objMI As MethodInfo = GetType(Console).GetMethod("WriteLine", New Type() {GetType(String), GetType(Object), GetType(Object)}) Dim getFilesMI As MethodInfo = GetType(Directory).GetMethod("GetFiles", New Type() {GetType(String)}) myFCMethod.InitLocals = True Dim myFCIL As ILGenerator = myFCMethod.GetILGenerator() Console.WriteLine("-- Generating MSIL method body...") Dim v0 As LocalBuilder = myFCIL.DeclareLocal(GetType(String)) Dim v1 As LocalBuilder = myFCIL.DeclareLocal(GetType(Integer)) Dim v2 As LocalBuilder = myFCIL.DeclareLocal(GetType(String)) Dim v3 As LocalBuilder = myFCIL.DeclareLocal(GetType(String())) Dim evalForEachLabel As Label = myFCIL.DefineLabel() Dim topOfForEachLabel As Label = myFCIL.DefineLabel() ' Build the method body. myFCIL.EmitCall(OpCodes.Call, currentDirGetMI, Nothing) myFCIL.Emit(OpCodes.Stloc_S, v0) myFCIL.Emit(OpCodes.Ldc_I4_0) myFCIL.Emit(OpCodes.Stloc_S, v1) myFCIL.Emit(OpCodes.Ldstr, "---") myFCIL.EmitCall(OpCodes.Call, writeLine0objMI, Nothing) myFCIL.Emit(OpCodes.Ldloc_S, v0) myFCIL.EmitCall(OpCodes.Call, getFilesMI, Nothing) myFCIL.Emit(OpCodes.Stloc_S, v3) myFCIL.Emit(OpCodes.Br_S, evalForEachLabel) ' foreach loop starts here. myFCIL.MarkLabel(topOfForEachLabel) ' Load array of strings and index, store value at index for output. myFCIL.Emit(OpCodes.Ldloc_S, v3) myFCIL.Emit(OpCodes.Ldloc_S, v1) myFCIL.Emit(OpCodes.Ldelem_Ref) myFCIL.Emit(OpCodes.Stloc_S, v2) myFCIL.Emit(OpCodes.Ldloc_S, v2) myFCIL.EmitCall(OpCodes.Call, writeLine0objMI, Nothing) ' Increment counter by one. myFCIL.Emit(OpCodes.Ldloc_S, v1) myFCIL.Emit(OpCodes.Ldc_I4_1) myFCIL.Emit(OpCodes.Add) myFCIL.Emit(OpCodes.Stloc_S, v1) ' Determine if end of file list array has been reached. myFCIL.MarkLabel(evalForEachLabel) myFCIL.Emit(OpCodes.Ldloc_S, v1) myFCIL.Emit(OpCodes.Ldloc_S, v3) myFCIL.Emit(OpCodes.Ldlen) myFCIL.Emit(OpCodes.Conv_I4) myFCIL.Emit(OpCodes.Blt_S, topOfForEachLabel) 'foreach loop end here. myFCIL.Emit(OpCodes.Ldstr, "---") myFCIL.EmitCall(OpCodes.Call, writeLine0objMI, Nothing) myFCIL.Emit(OpCodes.Ldstr, "There are {0} files in {1}.") myFCIL.Emit(OpCodes.Ldloc_S, v1) myFCIL.Emit(OpCodes.Box, GetType(Integer)) myFCIL.Emit(OpCodes.Ldloc_S, v0) myFCIL.EmitCall(OpCodes.Call, writeLine2objMI, Nothing) myFCIL.Emit(OpCodes.Ret) Dim myType As Type = myTypeBuilder.CreateType() myAsmBuilder.SetEntryPoint(myFCMethod) myAsmBuilder.Save(executableName) Console.WriteLine("-- Method generated, type completed, and assembly saved to disk.") Return myType End Function 'CreateADynamicAssembly Public Shared Sub Main() Dim executableName As String = Nothing Dim domainDir As String Console.Write("Enter a name for the file counting assembly: ") Dim executableNameNoExe As String = Console.ReadLine() executableName = executableNameNoExe + ".exe" Console.WriteLine("---") domainDir = Environment.CurrentDirectory Dim curDomain As AppDomain = Thread.GetDomain() ' Create a new AppDomain, with the current directory as the base. Console.WriteLine("Current Directory: {0}", Environment.CurrentDirectory) Dim mySetupInfo As New AppDomainSetup() mySetupInfo.ApplicationBase = domainDir mySetupInfo.ApplicationName = executableNameNoExe mySetupInfo.LoaderOptimization = LoaderOptimization.SingleDomain Dim myDomain As AppDomain = AppDomain.CreateDomain(executableNameNoExe, Nothing, mySetupInfo) Console.WriteLine("Creating a new AppDomain '{0}'...", executableNameNoExe) Console.WriteLine("-- Base Directory = '{0}'", myDomain.BaseDirectory) Console.WriteLine("-- Shadow Copy? = '{0}'", myDomain.ShadowCopyFiles) Console.WriteLine("---") Dim myFCType As Type = CreateADynamicAssembly(curDomain, executableNameNoExe) Console.WriteLine("Loading '{0}' from '{1}'...", executableName, myDomain.BaseDirectory.ToString()) Dim bFlags As BindingFlags = BindingFlags.Public Or BindingFlags.CreateInstance Or BindingFlags.Instance Dim myObjInstance As [Object] = myDomain.CreateInstanceAndUnwrap(executableNameNoExe, executableNameNoExe, False, bFlags, Nothing, Nothing, Nothing, Nothing, Nothing) Console.WriteLine("Executing method 'CountLocalFiles' in {0}...", myObjInstance.ToString()) myFCType.InvokeMember("CountLocalFiles", BindingFlags.InvokeMethod, Nothing, myObjInstance, New Object() {}) End Sub 'Main End Class 'ADDyno
using System; using System.IO; using System.Threading; using System.Reflection; using System.Reflection.Emit; using System.Runtime.Remoting; class ADDyno { public static Type CreateADynamicAssembly(ref AppDomain myNewDomain, string executableNameNoExe) { string executableName = executableNameNoExe + ".exe"; AssemblyName myAsmName = new AssemblyName(); myAsmName.Name = executableNameNoExe; myAsmName.CodeBase = Environment.CurrentDirectory; AssemblyBuilder myAsmBuilder = myNewDomain.DefineDynamicAssembly(myAsmName, AssemblyBuilderAccess.RunAndSave); Console.WriteLine("-- Dynamic Assembly instantiated."); ModuleBuilder myModBuilder = myAsmBuilder.DefineDynamicModule(executableNameNoExe , executableName); TypeBuilder myTypeBuilder = myModBuilder.DefineType(executableNameNoExe, TypeAttributes.Public, typeof(MarshalByRefObject)); MethodBuilder myFCMethod = myTypeBuilder.DefineMethod("CountLocalFiles" , MethodAttributes.Public | MethodAttributes.Static, null, new Type[] { }); MethodInfo currentDirGetMI = typeof(Environment).GetProperty("CurrentDirectory").GetGetMethod(); MethodInfo writeLine0objMI = typeof(Console).GetMethod("WriteLine" , new Type[] { typeof(string) }); MethodInfo writeLine2objMI = typeof(Console).GetMethod("WriteLine" , new Type[] { typeof(string), typeof(object), typeof(object) }); MethodInfo getFilesMI = typeof(Directory).GetMethod("GetFiles", new Type[] { typeof(string) }); myFCMethod.InitLocals = true; ILGenerator myFCIL = myFCMethod.GetILGenerator(); Console.WriteLine("-- Generating MSIL method body..."); LocalBuilder v0 = myFCIL.DeclareLocal(typeof(string)); LocalBuilder v1 = myFCIL.DeclareLocal(typeof(int)); LocalBuilder v2 = myFCIL.DeclareLocal(typeof(string)); LocalBuilder v3 = myFCIL.DeclareLocal(typeof(string[])); Label evalForEachLabel = myFCIL.DefineLabel(); Label topOfForEachLabel = myFCIL.DefineLabel(); // Build the method body. myFCIL.EmitCall(OpCodes.Call, currentDirGetMI, null); myFCIL.Emit(OpCodes.Stloc_S, v0); myFCIL.Emit(OpCodes.Ldc_I4_0); myFCIL.Emit(OpCodes.Stloc_S, v1); myFCIL.Emit(OpCodes.Ldstr, "---"); myFCIL.EmitCall(OpCodes.Call, writeLine0objMI, null); myFCIL.Emit(OpCodes.Ldloc_S, v0); myFCIL.EmitCall(OpCodes.Call, getFilesMI, null); myFCIL.Emit(OpCodes.Stloc_S, v3); myFCIL.Emit(OpCodes.Br_S, evalForEachLabel); // foreach loop starts here. myFCIL.MarkLabel(topOfForEachLabel); // Load array of strings and index, store value at index for output. myFCIL.Emit(OpCodes.Ldloc_S, v3); myFCIL.Emit(OpCodes.Ldloc_S, v1); myFCIL.Emit(OpCodes.Ldelem_Ref); myFCIL.Emit(OpCodes.Stloc_S, v2); myFCIL.Emit(OpCodes.Ldloc_S, v2); myFCIL.EmitCall(OpCodes.Call, writeLine0objMI, null); // Increment counter by one. myFCIL.Emit(OpCodes.Ldloc_S, v1); myFCIL.Emit(OpCodes.Ldc_I4_1); myFCIL.Emit(OpCodes.Add); myFCIL.Emit(OpCodes.Stloc_S, v1); // Determine if end of file list array has been reached. myFCIL.MarkLabel(evalForEachLabel); myFCIL.Emit(OpCodes.Ldloc_S, v1); myFCIL.Emit(OpCodes.Ldloc_S, v3); myFCIL.Emit(OpCodes.Ldlen); myFCIL.Emit(OpCodes.Conv_I4); myFCIL.Emit(OpCodes.Blt_S, topOfForEachLabel); //foreach loop end here. myFCIL.Emit(OpCodes.Ldstr, "---"); myFCIL.EmitCall(OpCodes.Call, writeLine0objMI, null); myFCIL.Emit(OpCodes.Ldstr, "There are {0} files in {1}."); myFCIL.Emit(OpCodes.Ldloc_S, v1); myFCIL.Emit(OpCodes.Box, typeof(int)); myFCIL.Emit(OpCodes.Ldloc_S, v0); myFCIL.EmitCall(OpCodes.Call, writeLine2objMI, null); myFCIL.Emit(OpCodes.Ret); Type myType = myTypeBuilder.CreateType(); myAsmBuilder.SetEntryPoint(myFCMethod); myAsmBuilder.Save(executableName); Console.WriteLine("-- Method generated, type completed, and assembly saved to disk."); return myType; } public static void Main() { string domainDir, executableName = null; Console.Write("Enter a name for the file counting assembly: "); string executableNameNoExe = Console.ReadLine(); executableName = executableNameNoExe + ".exe"; Console.WriteLine("---"); domainDir = Environment.CurrentDirectory; AppDomain curDomain = Thread.GetDomain(); // Create a new AppDomain, with the current directory as the base. Console.WriteLine("Current Directory: {0}", Environment.CurrentDirectory); AppDomainSetup mySetupInfo = new AppDomainSetup(); mySetupInfo.ApplicationBase = domainDir; mySetupInfo.ApplicationName = executableNameNoExe; mySetupInfo.LoaderOptimization = LoaderOptimization.SingleDomain; AppDomain myDomain = AppDomain.CreateDomain(executableNameNoExe, null, mySetupInfo); Console.WriteLine("Creating a new AppDomain '{0}'..." , executableNameNoExe); Console.WriteLine("-- Base Directory = '{0}'", myDomain.BaseDirectory); Console.WriteLine("-- Shadow Copy? = '{0}'", myDomain.ShadowCopyFiles); Console.WriteLine("---"); Type myFCType = CreateADynamicAssembly(ref curDomain, executableNameNoExe); Console.WriteLine("Loading '{0}' from '{1}'...", executableName, myDomain.BaseDirectory.ToString()); BindingFlags bFlags = (BindingFlags.Public | BindingFlags.CreateInstance | BindingFlags.Instance); Object myObjInstance = myDomain.CreateInstanceAndUnwrap(executableNameNoExe, executableNameNoExe, false, bFlags, null, null, null, null, null); Console.WriteLine("Executing method 'CountLocalFiles' in {0}...", myObjInstance.ToString()); myFCType.InvokeMember("CountLocalFiles", BindingFlags.InvokeMethod, null, myObjInstance, new object[] { }); } }
using namespace System; using namespace System::IO; using namespace System::Threading; using namespace System::Reflection; using namespace System::Reflection::Emit; using namespace System::Runtime::Remoting; ref class ADDyno { public: static Type^ CreateADynamicAssembly( interior_ptr<AppDomain^> myNewDomain, String^ executableNameNoExe ) { String^ executableName = String::Concat( executableNameNoExe, ".exe" ); AssemblyName^ myAsmName = gcnew AssemblyName; myAsmName->Name = executableNameNoExe; myAsmName->CodeBase = Environment::CurrentDirectory; AssemblyBuilder^ myAsmBuilder = ( *myNewDomain)->DefineDynamicAssembly( myAsmName, AssemblyBuilderAccess::RunAndSave ); Console::WriteLine( "-- Dynamic Assembly instantiated." ); ModuleBuilder^ myModBuilder = myAsmBuilder->DefineDynamicModule( executableNameNoExe, executableName ); TypeBuilder^ myTypeBuilder = myModBuilder->DefineType( executableNameNoExe, TypeAttributes::Public, MarshalByRefObject::typeid ); array<Type^>^temp0 = nullptr; MethodBuilder^ myFCMethod = myTypeBuilder->DefineMethod( "CountLocalFiles", static_cast<MethodAttributes>(MethodAttributes::Public | MethodAttributes::Static), nullptr, temp0 ); MethodInfo^ currentDirGetMI = Environment::typeid->GetProperty( "CurrentDirectory" )->GetGetMethod(); array<Type^>^temp1 = {String::typeid}; MethodInfo^ writeLine0objMI = Console::typeid->GetMethod( "WriteLine", temp1 ); array<Type^>^temp2 = {String::typeid,Object::typeid,Object::typeid}; MethodInfo^ writeLine2objMI = Console::typeid->GetMethod( "WriteLine", temp2 ); array<Type^>^temp3 = {String::typeid}; MethodInfo^ getFilesMI = Directory::typeid->GetMethod( "GetFiles", temp3 ); myFCMethod->InitLocals = true; ILGenerator^ myFCIL = myFCMethod->GetILGenerator(); Console::WriteLine( "-- Generating MSIL method body..." ); LocalBuilder^ v0 = myFCIL->DeclareLocal( String::typeid ); LocalBuilder^ v1 = myFCIL->DeclareLocal( int::typeid ); LocalBuilder^ v2 = myFCIL->DeclareLocal( String::typeid ); LocalBuilder^ v3 = myFCIL->DeclareLocal( array<String^>::typeid ); Label evalForEachLabel = myFCIL->DefineLabel(); Label topOfForEachLabel = myFCIL->DefineLabel(); // Build the method body. myFCIL->EmitCall( OpCodes::Call, currentDirGetMI, nullptr ); myFCIL->Emit( OpCodes::Stloc_S, v0 ); myFCIL->Emit( OpCodes::Ldc_I4_0 ); myFCIL->Emit( OpCodes::Stloc_S, v1 ); myFCIL->Emit( OpCodes::Ldstr, "---" ); myFCIL->EmitCall( OpCodes::Call, writeLine0objMI, nullptr ); myFCIL->Emit( OpCodes::Ldloc_S, v0 ); myFCIL->EmitCall( OpCodes::Call, getFilesMI, nullptr ); myFCIL->Emit( OpCodes::Stloc_S, v3 ); myFCIL->Emit( OpCodes::Br_S, evalForEachLabel ); // foreach loop starts here. myFCIL->MarkLabel( topOfForEachLabel ); // Load array of strings and index, store value at index for output. myFCIL->Emit( OpCodes::Ldloc_S, v3 ); myFCIL->Emit( OpCodes::Ldloc_S, v1 ); myFCIL->Emit( OpCodes::Ldelem_Ref ); myFCIL->Emit( OpCodes::Stloc_S, v2 ); myFCIL->Emit( OpCodes::Ldloc_S, v2 ); myFCIL->EmitCall( OpCodes::Call, writeLine0objMI, nullptr ); // Increment counter by one. myFCIL->Emit( OpCodes::Ldloc_S, v1 ); myFCIL->Emit( OpCodes::Ldc_I4_1 ); myFCIL->Emit( OpCodes::Add ); myFCIL->Emit( OpCodes::Stloc_S, v1 ); // Determine if end of file list array has been reached. myFCIL->MarkLabel( evalForEachLabel ); myFCIL->Emit( OpCodes::Ldloc_S, v1 ); myFCIL->Emit( OpCodes::Ldloc_S, v3 ); myFCIL->Emit( OpCodes::Ldlen ); myFCIL->Emit( OpCodes::Conv_I4 ); myFCIL->Emit( OpCodes::Blt_S, topOfForEachLabel ); //foreach loop end here. myFCIL->Emit( OpCodes::Ldstr, "---" ); myFCIL->EmitCall( OpCodes::Call, writeLine0objMI, nullptr ); myFCIL->Emit( OpCodes::Ldstr, "There are {0} files in {1}." ); myFCIL->Emit( OpCodes::Ldloc_S, v1 ); myFCIL->Emit( OpCodes::Box, int::typeid ); myFCIL->Emit( OpCodes::Ldloc_S, v0 ); myFCIL->EmitCall( OpCodes::Call, writeLine2objMI, nullptr ); myFCIL->Emit( OpCodes::Ret ); Type^ myType = myTypeBuilder->CreateType(); myAsmBuilder->SetEntryPoint( myFCMethod ); myAsmBuilder->Save( executableName ); Console::WriteLine( "-- Method generated, type completed, and assembly saved to disk." ); return myType; } }; int main() { String^ domainDir; String^ executableName = nullptr; Console::Write( "Enter a name for the file counting assembly: " ); String^ executableNameNoExe = Console::ReadLine(); executableName = String::Concat( executableNameNoExe, ".exe" ); Console::WriteLine( "---" ); domainDir = Environment::CurrentDirectory; AppDomain^ curDomain = Thread::GetDomain(); // Create a new AppDomain, with the current directory as the base. Console::WriteLine( "Current Directory: {0}", Environment::CurrentDirectory ); AppDomainSetup^ mySetupInfo = gcnew AppDomainSetup; mySetupInfo->ApplicationBase = domainDir; mySetupInfo->ApplicationName = executableNameNoExe; mySetupInfo->LoaderOptimization = LoaderOptimization::SingleDomain; AppDomain^ myDomain = AppDomain::CreateDomain( executableNameNoExe, nullptr, mySetupInfo ); Console::WriteLine( "Creating a new AppDomain '{0}'...", executableNameNoExe ); Console::WriteLine( "-- Base Directory = '{0}'", myDomain->BaseDirectory ); Console::WriteLine( "-- Shadow Copy? = '{0}'", myDomain->ShadowCopyFiles ); Console::WriteLine( "---" ); Type^ myFCType = ADDyno::CreateADynamicAssembly( &curDomain, executableNameNoExe ); Console::WriteLine( "Loading '{0}' from '{1}'...", executableName, myDomain->BaseDirectory ); BindingFlags bFlags = static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::CreateInstance | BindingFlags::Instance); Object^ myObjInstance = myDomain->CreateInstanceAndUnwrap( executableNameNoExe, executableNameNoExe, false, bFlags, nullptr, nullptr, nullptr, nullptr, nullptr ); Console::WriteLine( "Executing method 'CountLocalFiles' in {0}...", myObjInstance ); array<Object^>^temp4 = nullptr; myFCType->InvokeMember( "CountLocalFiles", BindingFlags::InvokeMethod, nullptr, myObjInstance, temp4 ); }
import System.*; import System.IO.*; import System.Threading.*; import System.Reflection.*; import System.Reflection.Emit.*; import System.Runtime.Remoting.*; class ADDyno { public static Type CreateADynamicAssembly(AppDomain myNewDomain, String executableNameNoExe) { String executableName = executableNameNoExe + ".exe"; AssemblyName myAsmName = new AssemblyName(); myAsmName.set_Name(executableNameNoExe); myAsmName.set_CodeBase(Environment.get_CurrentDirectory()); AssemblyBuilder myAsmBuilder = myNewDomain.DefineDynamicAssembly(myAsmName, AssemblyBuilderAccess.RunAndSave); Console.WriteLine("-- Dynamic Assembly instantiated."); ModuleBuilder myModBuilder = myAsmBuilder.DefineDynamicModule(executableNameNoExe, executableName); TypeBuilder myTypeBuilder = myModBuilder.DefineType(executableNameNoExe, TypeAttributes.Public, MarshalByRefObject.class.ToType()); MethodBuilder myFCMethod = myTypeBuilder.DefineMethod("CountLocalFiles" , MethodAttributes.Public | MethodAttributes.Static, null, new Type[]{}); MethodInfo currentDirGetMI = Environment.class.ToType(). GetProperty("CurrentDirectory").GetGetMethod(); MethodInfo writeLine0ObjMI = Console.class.ToType(). GetMethod("WriteLine", new Type[]{String.class.ToType()}); MethodInfo writeLine2ObjMI = Console.class.ToType(). GetMethod("WriteLine", new Type[]{String.class.ToType(), Object.class.ToType(), Object.class.ToType()}); MethodInfo getFilesMI = Directory.class.ToType().GetMethod("GetFiles", new Type[]{String.class.ToType()}); myFCMethod.set_InitLocals(true); ILGenerator myFCIL = myFCMethod.GetILGenerator(); Console.WriteLine("-- Generating MSIL method body..."); LocalBuilder v0 = myFCIL.DeclareLocal(String.class.ToType()); LocalBuilder v1 = myFCIL.DeclareLocal(int.class.ToType()); LocalBuilder v2 = myFCIL.DeclareLocal(String.class.ToType()); LocalBuilder v3 = myFCIL.DeclareLocal(String[].class.ToType()); Label evalForEachLabel = myFCIL.DefineLabel(); Label topOfForEachLabel = myFCIL.DefineLabel(); // Build the method body. myFCIL.EmitCall(OpCodes.Call, currentDirGetMI, null); myFCIL.Emit(OpCodes.Stloc_S, v0); myFCIL.Emit(OpCodes.Ldc_I4_0); myFCIL.Emit(OpCodes.Stloc_S, v1); myFCIL.Emit(OpCodes.Ldstr, "---"); myFCIL.EmitCall(OpCodes.Call, writeLine0ObjMI, null); myFCIL.Emit(OpCodes.Ldloc_S, v0); myFCIL.EmitCall(OpCodes.Call, getFilesMI, null); myFCIL.Emit(OpCodes.Stloc_S, v3); myFCIL.Emit(OpCodes.Br_S, evalForEachLabel); // foreach loop starts here. myFCIL.MarkLabel(topOfForEachLabel); // Load array of strings and index, store value at index for output. myFCIL.Emit(OpCodes.Ldloc_S, v3); myFCIL.Emit(OpCodes.Ldloc_S, v1); myFCIL.Emit(OpCodes.Ldelem_Ref); myFCIL.Emit(OpCodes.Stloc_S, v2); myFCIL.Emit(OpCodes.Ldloc_S, v2); myFCIL.EmitCall(OpCodes.Call, writeLine0ObjMI, null); // Increment counter by one. myFCIL.Emit(OpCodes.Ldloc_S, v1); myFCIL.Emit(OpCodes.Ldc_I4_1); myFCIL.Emit(OpCodes.Add); myFCIL.Emit(OpCodes.Stloc_S, v1); // Determine if end of file list array has been reached. myFCIL.MarkLabel(evalForEachLabel); myFCIL.Emit(OpCodes.Ldloc_S, v1); myFCIL.Emit(OpCodes.Ldloc_S, v3); myFCIL.Emit(OpCodes.Ldlen); myFCIL.Emit(OpCodes.Conv_I4); myFCIL.Emit(OpCodes.Blt_S, topOfForEachLabel); //foreach loop end here. myFCIL.Emit(OpCodes.Ldstr, "---"); myFCIL.EmitCall(OpCodes.Call, writeLine0ObjMI, null); myFCIL.Emit(OpCodes.Ldstr, "There are {0} files in {1}."); myFCIL.Emit(OpCodes.Ldloc_S, v1); myFCIL.Emit(OpCodes.Box, int.class.ToType()); myFCIL.Emit(OpCodes.Ldloc_S, v0); myFCIL.EmitCall(OpCodes.Call, writeLine2ObjMI, null); myFCIL.Emit(OpCodes.Ret); Type myType = myTypeBuilder.CreateType(); myAsmBuilder.SetEntryPoint(myFCMethod); myAsmBuilder.Save(executableName); Console.WriteLine("-- Method generated, type completed, " + "and assembly saved to disk."); return myType; } //CreateADynamicAssembly public static void main(String[] args) { String executableName = null; String domainDir; Console.Write("Enter a name for the file counting assembly: "); String executableNameNoExe = Console.ReadLine(); executableName = executableNameNoExe + ".exe"; Console.WriteLine("---"); domainDir = Environment.get_CurrentDirectory(); AppDomain curDomain = System.Threading.Thread.GetDomain(); // Create a new AppDomain, with the current directory as the base. Console.WriteLine("Current Directory: {0}", Environment.get_CurrentDirectory()); AppDomainSetup mySetupInfo = new AppDomainSetup(); mySetupInfo.set_ApplicationBase(domainDir); mySetupInfo.set_ApplicationName(executableNameNoExe); mySetupInfo.set_LoaderOptimization(LoaderOptimization.SingleDomain); AppDomain myDomain = AppDomain.CreateDomain(executableNameNoExe, null, mySetupInfo); Console.WriteLine("Creating a new AppDomain '{0}'..." , executableNameNoExe); Console.WriteLine("-- Base Directory = '{0}'", myDomain.get_BaseDirectory()); Console.WriteLine("-- Shadow Copy? = '{0}'", (System.Boolean)myDomain.get_ShadowCopyFiles()); Console.WriteLine("---"); Type myFCType = CreateADynamicAssembly(curDomain, executableNameNoExe); Console.WriteLine("Loading '{0}' from '{1}'...", executableName, myDomain.get_BaseDirectory().ToString()); BindingFlags bFlags = BindingFlags.Public | BindingFlags.CreateInstance | BindingFlags.Instance; Object myObjInstance = myDomain.CreateInstanceAndUnwrap(executableNameNoExe, executableNameNoExe, false, bFlags, null, null, null, null, null); Console.WriteLine("Executing method 'CountLocalFiles' in {0}...", myObjInstance.ToString()); myFCType.InvokeMember("CountLocalFiles", BindingFlags.InvokeMethod, null, myObjInstance, new Object[]{}); } //main } //ADDyno

- FileIOPermissionAccess (アセンブリの場所にアクセスするために必要なアクセス許可)。FileIOPermissionAccess.PathDiscovery (関連する列挙体)
- FileIOPermissionAccess (アセンブリ マニフェストを格納しているファイルを読み取るために必要なアクセス許可)。FileIOPermissionAccess.Read (関連する列挙体)
- WebPermission (アセンブリがローカルにない場合にアセンブリの場所にアクセスするために必要なアクセス許可)。
- SecurityPermission (デリゲートのインスタンスの作成時にアンマネージ コードを呼び出すために必要なアクセス許可)。SecurityPermissionFlag.UnmanagedCode (関連する列挙体)
- ReflectionPermission (すべての型のメンバに対して操作を呼び出すために必要なアクセス許可)。ReflectionPermissionFlag.MemberAccess (関連する列挙体)

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


AppDomain.CreateInstanceAndUnwrap メソッド

名前 | 説明 |
---|---|
AppDomain.CreateInstanceAndUnwrap (String, String) | 指定した型の新しいインスタンスを作成します。パラメータには、型が定義されているアセンブリの名前と型の名前を指定します。 |
AppDomain.CreateInstanceAndUnwrap (String, String, Object[]) | 指定した型の新しいインスタンスを作成します。パラメータには、型が定義されているアセンブリの名前、型の名前、およびアクティベーション属性の配列を指定します。 |
AppDomain.CreateInstanceAndUnwrap (String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[], Evidence) | 指定した型の新しいインスタンスを作成します。パラメータには、型の名前、およびその検索方法と作成方法を指定します。 |

Weblioに収録されているすべての辞書からAppDomain.CreateInstanceAndUnwrapを検索する場合は、下記のリンクをクリックしてください。

- AppDomain.CreateInstanceAndUnwrapのページへのリンク