AppDomain.CreateInstanceAndUnwrap AppDomain.CreateInstanceAndUnwrap AppDomain.CreateInstanceAndUnwrap AppDomain.CreateInstanceAndUnwrap Method

定義

指定した型の新しいインスタンスを作成します。Creates a new instance of a specified type.

オーバーロード

CreateInstanceAndUnwrap(String, String) CreateInstanceAndUnwrap(String, String) CreateInstanceAndUnwrap(String, String) CreateInstanceAndUnwrap(String, String)

指定した型の新しいインスタンスを作成します。Creates a new instance of the specified type. 型が定義されているアセンブリの名前と、型の名前をパラメーターで指定します。Parameters specify the assembly where the type is defined, and the name of the type.

CreateInstanceAndUnwrap(String, String, Object[]) CreateInstanceAndUnwrap(String, String, Object[]) CreateInstanceAndUnwrap(String, String, Object[]) CreateInstanceAndUnwrap(String, String, Object[])

指定した型の新しいインスタンスを作成します。Creates a new instance of the specified type. 型が定義されているアセンブリの名前、型の名前、およびアクティベーション属性の配列をパラメーターで指定します。Parameters specify the assembly where the type is defined, the name of the type, and an array of activation attributes.

CreateInstanceAndUnwrap(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[]) CreateInstanceAndUnwrap(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[]) CreateInstanceAndUnwrap(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[])

指定したアセンブリで定義されている、指定した型の新しいインスタンスを作成します。型名の大文字と小文字の区別を無視するかどうか、作成する型を選択するために使用されるバインディング属性とバインダー、コンストラクターの引数、カルチャ、およびアクティベーション属性を指定します。Creates a new instance of the specified type defined in the specified assembly, specifying whether the case of the type name is ignored; the binding attributes and the binder that are used to select the type to be created; the arguments of the constructor; the culture; and the activation attributes.

CreateInstanceAndUnwrap(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[], Evidence) CreateInstanceAndUnwrap(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[], Evidence) CreateInstanceAndUnwrap(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[], Evidence)

指定した型の新しいインスタンスを作成します。Creates a new instance of the specified type. 型の名前、およびその検索方法と作成方法をパラメーターで指定します。Parameters specify the name of the type, and how it is found and created.

CreateInstanceAndUnwrap(String, String) CreateInstanceAndUnwrap(String, String) CreateInstanceAndUnwrap(String, String) CreateInstanceAndUnwrap(String, String)

指定した型の新しいインスタンスを作成します。Creates a new instance of the specified type. 型が定義されているアセンブリの名前と、型の名前をパラメーターで指定します。Parameters specify the assembly where the type is defined, and the name of the type.

public:
 System::Object ^ CreateInstanceAndUnwrap(System::String ^ assemblyName, System::String ^ typeName);
public object CreateInstanceAndUnwrap (string assemblyName, string typeName);
member this.CreateInstanceAndUnwrap : string * string -> obj
Public Function CreateInstanceAndUnwrap (assemblyName As String, typeName As String) As Object

パラメーター

assemblyName
String String String String

アセンブリの表示名。The display name of the assembly. 以下を参照してください。FullNameSee FullName.

typeName
String String String String

要求する型の完全修飾名。アセンブリは指定せずに、名前空間だけを指定します。この名前は、FullName プロパティによって返されます。The fully qualified name of the requested type, including the namespace but not the assembly, as returned by the FullName property.

戻り値

typeName で指定したオブジェクトのインスタンス。An instance of the object specified by typeName.

例外

assemblyName または typeNamenull です。assemblyName or typeName is null.

一致するパブリック コンストラクターが見つかりませんでした。No matching public constructor was found.

typenameassemblyName に見つかりませんでした。typename was not found in assemblyName.

assemblyName が見つかりませんでした。assemblyName was not found.

呼び出し元には、このコンストラクターを呼び出すアクセス許可がありません。The caller does not have permission to call this constructor.

アンロードされたアプリケーション ドメインで操作しようとします。The operation is attempted on an unloaded application domain.

assemblyName は正しいアセンブリではありません。assemblyName is not a valid assembly.

または-or- 共通言語ランタイムのバージョン 2.0 以降が現在読み込まれています。assemblyName は、より新しいバージョンでコンパイルされています。Version 2.0 or later of the common language runtime is currently loaded and assemblyName was compiled with a later version.

アセンブリまたはモジュールが、2 つの異なる証拠を使用して 2 回読み込まれました。An assembly or module was loaded twice with two different evidences.

次のコード例では、別のアプリケーション ドメインでコードを実行する最も簡単な方法を示します。The following code example shows the simplest way to execute code in another application domain. 例では、という名前のクラスを定義するWorkerから継承するMarshalByRefObjectします。The example defines a class named Worker that inherits from MarshalByRefObject. Workerクラスを実行しているアプリケーション ドメインの名前を表示するメソッドを定義します。The Worker class defines a method that displays the name of the application domain in which it is executing. インスタンスを作成する例では、Worker既定のアプリケーション ドメインと、新しいアプリケーション ドメイン。The example creates instances of Worker in the default application domain and in a new application domain.

注意

含むアセンブリWorker両方のアプリケーション ドメインに読み込まれる必要がありますが、新しいアプリケーション ドメインにのみ存在する他のアセンブリを読み込むことができます。The assembly that contains Worker must be loaded into both application domains, but it can load other assemblies that exist only in the new application domain.

using namespace System;
using namespace System::Reflection;

public ref class Worker : MarshalByRefObject
{
public:
    void PrintDomain() 
    { 
        Console::WriteLine("Object is executing in AppDomain \"{0}\"",
            AppDomain::CurrentDomain->FriendlyName); 
    }
};
 
void main()
{
    // Create an ordinary instance in the current AppDomain
    Worker^ localWorker = gcnew Worker();
    localWorker->PrintDomain();
 
    // Create a new application domain, create an instance
    // of Worker in the application domain, and execute code
    // there.
    AppDomain^ ad = AppDomain::CreateDomain("New domain");
    Worker^ remoteWorker = (Worker^) ad->CreateInstanceAndUnwrap(
        Worker::typeid->Assembly->FullName,
        "Worker");
    remoteWorker->PrintDomain();
}

/* This code produces output similar to the following:

Object is executing in AppDomain "source.exe"
Object is executing in AppDomain "New domain"
 */
using System;
using System.Reflection;
 
public class Worker : MarshalByRefObject
{
    public void PrintDomain() 
    { 
        Console.WriteLine("Object is executing in AppDomain \"{0}\"",
            AppDomain.CurrentDomain.FriendlyName); 
    }
}
 
class Example
{
    public static void Main()
    {
        // Create an ordinary instance in the current AppDomain
        Worker localWorker = new Worker();
        localWorker.PrintDomain();
 
        // Create a new application domain, create an instance
        // of Worker in the application domain, and execute code
        // there.
        AppDomain ad = AppDomain.CreateDomain("New domain");
        Worker remoteWorker = (Worker) ad.CreateInstanceAndUnwrap(
            typeof(Worker).Assembly.FullName,
            "Worker");
        remoteWorker.PrintDomain();
    }
}

/* This code produces output similar to the following:

Object is executing in AppDomain "source.exe"
Object is executing in AppDomain "New domain"
 */
Imports System.Reflection

Public Class Worker
    Inherits MarshalByRefObject
    
    Public Sub PrintDomain() 
        Console.WriteLine("Object is executing in AppDomain ""{0}""", _
            AppDomain.CurrentDomain.FriendlyName)
    End Sub 
End Class 

Class Example
    
    Public Shared Sub Main() 
        ' Create an ordinary instance in the current AppDomain
        Dim localWorker As New Worker()
        localWorker.PrintDomain()
        
        ' Create a new application domain, create an instance
        ' of Worker in the application domain, and execute code
        ' there.
        Dim ad As AppDomain = AppDomain.CreateDomain("New domain")
        Dim remoteWorker As Worker = CType( _
            ad.CreateInstanceAndUnwrap( _
                GetType(Worker).Assembly.FullName, _
                "Worker"), _
            Worker)
        remoteWorker.PrintDomain()
    
    End Sub 
End Class 

' This code produces output similar to the following:
'
'Object is executing in AppDomain "source.exe"
'Object is executing in AppDomain "New domain"

注釈

これは、結合メソッドはCreateInstanceObjectHandle.Unwrapします。This is a convenience method that combines CreateInstance and ObjectHandle.Unwrap. このメソッドの既定のコンス トラクターを呼び出すtypeNameします。This method calls the default constructor for typeName.

参照してくださいAssemblyNameの形式に関するassemblyNameします。See AssemblyName for the format of assemblyName. 参照してください、Type.FullNameプロパティの形式に関するtypeNameします。See the Type.FullName property for the format of typeName.

注意

メソッドへの事前バインディングされた呼び出しを行った場合M型のオブジェクトのT1によって返されたCreateInstanceAndUnwrap、メソッドは、型のオブジェクトのメソッドへの事前バインディングされた呼び出しをおよびT2アセンブリでC以外、現在のアセンブリまたはアセンブリを含むT1、アセンブリCは現在のアプリケーション ドメインに読み込まれます。If you make an early-bound call to a method M of an object of type T1 that was returned by CreateInstanceAndUnwrap, and that method makes an early-bound call to a method of an object of type T2 in an assembly C other than the current assembly or the assembly containing T1, assembly C is loaded into the current application domain. 事前バインディングされた呼び出し場合でも、この読み込みが行われますT1.M()の本体で行われた、 DynamicMethod、またはその他の動的に生成されたコード。This loading occurs even if the early-bound call to T1.M() was made in the body of a DynamicMethod, or in other dynamically generated code. 現在のドメインが既定のドメイン、アセンブリがかどうかCプロセスが終了するまでアンロードすることはできません。If the current domain is the default domain, assembly C cannot be unloaded until the process ends. 後で、現在のドメインがアセンブリの読み込みを試みるとC負荷が失敗する可能性があります。If the current domain later attempts to load assembly C, the load might fail.

セキュリティ

FileIOPermissionAccess
アセンブリ マニフェストを含むファイルを読み取るため、モジュール マニフェストのファイル以外から型を作成する場合またはします。for the ability to read the file containing the assembly manifest, or if you are creating a type from a module other than the manifest file. 関連付けられた列挙体。 ReadAssociated enumeration: Read

WebPermission
アセンブリがローカルでない場合、アセンブリの場所にアクセスする機能。for the ability to access the location of the assembly if the assembly is not local.

こちらもご覧ください

CreateInstanceAndUnwrap(String, String, Object[]) CreateInstanceAndUnwrap(String, String, Object[]) CreateInstanceAndUnwrap(String, String, Object[]) CreateInstanceAndUnwrap(String, String, Object[])

指定した型の新しいインスタンスを作成します。Creates a new instance of the specified type. 型が定義されているアセンブリの名前、型の名前、およびアクティベーション属性の配列をパラメーターで指定します。Parameters specify the assembly where the type is defined, the name of the type, and an array of activation attributes.

public:
 System::Object ^ CreateInstanceAndUnwrap(System::String ^ assemblyName, System::String ^ typeName, cli::array <System::Object ^> ^ activationAttributes);
public object CreateInstanceAndUnwrap (string assemblyName, string typeName, object[] activationAttributes);
member this.CreateInstanceAndUnwrap : string * string * obj[] -> obj
Public Function CreateInstanceAndUnwrap (assemblyName As String, typeName As String, activationAttributes As Object()) As Object

パラメーター

assemblyName
String String String String

アセンブリの表示名。The display name of the assembly. 以下を参照してください。FullNameSee FullName.

typeName
String String String String

要求する型の完全修飾名。アセンブリは指定せずに、名前空間だけを指定します。この名前は、FullName プロパティによって返されます。The fully qualified name of the requested type, including the namespace but not the assembly, as returned by the FullName property.

activationAttributes
Object[]

アクティべーションに参加できる 1 つ以上の属性の配列。An array of one or more attributes that can participate in activation. 通常、リモート オブジェクトをアクティブ化するために必要な URL を指定する 1 つの UrlAttribute オブジェクトを含む配列。Typically, an array that contains a single UrlAttribute object that specifies the URL that is required to activate a remote object.

このパラメーターは、クライアント側でアクティブ化されるオブジェクトに関連しています。クライアント アクティベーションは、下位互換性のために残されているレガシ テクノロジです。新規の開発には使用しないでください。This parameter is related to client-activated objects.Client activation is a legacy technology that is retained for backward compatibility but is not recommended for new development. 分散アプリケーションは、代わりに Windows Communication Foundation (WCF) を使用する必要があります。Distributed applications should instead use Windows Communication Foundation.

戻り値

typeName で指定したオブジェクトのインスタンス。An instance of the object specified by typeName.

例外

assemblyName または typeNamenull です。assemblyName or typeName is null.

一致するパブリック コンストラクターが見つかりませんでした。No matching public constructor was found.

typenameassemblyName に見つかりませんでした。typename was not found in assemblyName.

assemblyName が見つかりませんでした。assemblyName was not found.

呼び出し元には、このコンストラクターを呼び出すアクセス許可がありません。The caller does not have permission to call this constructor.

呼び出し元は、MarshalByRefObject を継承しないオブジェクトのアクティベーション属性を提供できません。The caller cannot provide activation attributes for an object that does not inherit from MarshalByRefObject.

アンロードされたアプリケーション ドメインで操作しようとします。The operation is attempted on an unloaded application domain.

assemblyName は正しいアセンブリではありません。assemblyName is not a valid assembly.

または-or- 共通言語ランタイムのバージョン 2.0 以降が現在読み込まれています。assemblyName は、より新しいバージョンでコンパイルされています。Version 2.0 or later of the common language runtime is currently loaded and assemblyName was compiled with a later version.

アセンブリまたはモジュールが、2 つの異なる証拠を使用して 2 回読み込まれました。An assembly or module was loaded twice with two different evidences.

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

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[] { });
			
		
   }

}

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 



注釈

これは、結合メソッドはCreateInstanceObjectHandle.Unwrapします。This is a convenience method that combines CreateInstance and ObjectHandle.Unwrap. このメソッドの既定のコンス トラクターを呼び出すtypeNameします。This method calls the default constructor for typeName.

参照してくださいAssemblyNameの形式に関するassemblyNameします。See AssemblyName for the format of assemblyName. 参照してください、Type.FullNameプロパティの形式に関するtypeNameします。See the Type.FullName property for the format of typeName.

注意

メソッドへの事前バインディングされた呼び出しを行った場合M型のオブジェクトのT1によって返されたCreateInstanceAndUnwrap、メソッドは、型のオブジェクトのメソッドへの事前バインディングされた呼び出しをおよびT2アセンブリでC以外、現在のアセンブリまたはアセンブリを含むT1、アセンブリCは現在のアプリケーション ドメインに読み込まれます。If you make an early-bound call to a method M of an object of type T1 that was returned by CreateInstanceAndUnwrap, and that method makes an early-bound call to a method of an object of type T2 in an assembly C other than the current assembly or the assembly containing T1, assembly C is loaded into the current application domain. 事前バインディングされた呼び出し場合でも、この読み込みが行われますT1.M()の本体で行われた、 DynamicMethod、またはその他の動的に生成されたコード。This loading occurs even if the early-bound call to T1.M() was made in the body of a DynamicMethod, or in other dynamically generated code. 現在のドメインが既定のドメイン、アセンブリがかどうかCプロセスが終了するまでアンロードすることはできません。If the current domain is the default domain, assembly C cannot be unloaded until the process ends. 後で、現在のドメインがアセンブリの読み込みを試みるとC負荷が失敗する可能性があります。If the current domain later attempts to load assembly C, the load might fail.

セキュリティ

FileIOPermissionAccess
アセンブリ マニフェストを含むファイルの読み取りに必要なアクセス許可。for the ability to read the file containing the assembly manifest. 関連付けられた列挙体。 ReadAssociated enumeration: Read

WebPermission
アセンブリがローカルでない場合、アセンブリの場所にアクセスする機能。for the ability to access the location of the assembly if the assembly is not local.

SecurityPermission
デリゲートのインスタンスを作成するときに、アンマネージ コードを呼び出す機能。for the ability to call unmanaged code when creating an instance of a delegate. 関連付けられた列挙体。 UnmanagedCodeAssociated enumeration: UnmanagedCode

ReflectionPermission
すべての型のメンバーに対して操作を呼び出す権限です。for the ability to invoke operations on all type members. 関連付けられた列挙体。 MemberAccessAssociated enumeration: MemberAccess

こちらもご覧ください

CreateInstanceAndUnwrap(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[]) CreateInstanceAndUnwrap(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[]) CreateInstanceAndUnwrap(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[])

指定したアセンブリで定義されている、指定した型の新しいインスタンスを作成します。型名の大文字と小文字の区別を無視するかどうか、作成する型を選択するために使用されるバインディング属性とバインダー、コンストラクターの引数、カルチャ、およびアクティベーション属性を指定します。Creates a new instance of the specified type defined in the specified assembly, specifying whether the case of the type name is ignored; the binding attributes and the binder that are used to select the type to be created; the arguments of the constructor; the culture; and the activation attributes.

public:
 System::Object ^ CreateInstanceAndUnwrap(System::String ^ assemblyName, System::String ^ typeName, bool ignoreCase, System::Reflection::BindingFlags bindingAttr, System::Reflection::Binder ^ binder, cli::array <System::Object ^> ^ args, System::Globalization::CultureInfo ^ culture, cli::array <System::Object ^> ^ activationAttributes);
public object CreateInstanceAndUnwrap (string assemblyName, string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, object[] args, System.Globalization.CultureInfo culture, object[] activationAttributes);
member this.CreateInstanceAndUnwrap : string * string * bool * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo * obj[] -> obj

パラメーター

assemblyName
String String String String

アセンブリの表示名。The display name of the assembly. 以下を参照してください。FullNameSee FullName.

typeName
String String String String

要求する型の完全修飾名。アセンブリは指定せずに、名前空間だけを指定します。この名前は、FullName プロパティによって返されます。The fully qualified name of the requested type, including the namespace but not the assembly, as returned by the FullName property.

ignoreCase
Boolean Boolean Boolean Boolean

検索で大文字と小文字を区別するかどうかを指定する Boolean 値。A Boolean value specifying whether to perform a case-sensitive search or not.

bindingAttr
BindingFlags BindingFlags BindingFlags BindingFlags

typeName コンストラクターの検索に影響を与える 0 個以上のビット フラグの組み合わせ。A combination of zero or more bit flags that affect the search for the typeName constructor. bindingAttr が 0 の場合は、大文字と小文字を区別してパブリック コンストラクターを検索します。If bindingAttr is zero, a case-sensitive search for public constructors is conducted.

binder
Binder Binder Binder Binder

バインディング、引数型の強制変換、メンバーの呼び出し、および、リフレクションを使用した MemberInfo オブジェクトの取得を有効にするオブジェクト。An object that enables the binding, coercion of argument types, invocation of members, and retrieval of MemberInfo objects using reflection. binder が null の場合は、既定のバインダーが使用されます。If binder is null, the default binder is used.

args
Object[]

コンストラクターに渡される引数。The arguments to pass to the constructor. この引数の配列は、呼び出すコンストラクターのパラメーターに対して、数、順序、および型を一致させる必要があります。This array of arguments must match in number, order, and type the parameters of the constructor to invoke. 既定のコンストラクターを優先する場合は、args を空の配列または null にする必要があります。If the default constructor is preferred, args must be an empty array or null.

culture
CultureInfo CultureInfo CultureInfo CultureInfo

型の強制変換を制御するために使用するカルチャ固有のオブジェクト。A culture-specific object used to govern the coercion of types. culturenull の場合は、現在のスレッドの CultureInfo が使用されます。If culture is null, the CultureInfo for the current thread is used.

activationAttributes
Object[]

アクティべーションに参加できる 1 つ以上の属性の配列。An array of one or more attributes that can participate in activation. 一般的に、1 つの配列に 1 つの UrlAttribute オブジェクトが含まれます。Typically, an array that contains a single UrlAttribute object. リモート オブジェクトのアクティブ化に必要な URL を指定します。that specifies the URL that is required to activate a remote object.

このパラメーターは、クライアント側でアクティブ化されるオブジェクトに関連しています。This parameter is related to client-activated objects. クライアント アクティベーションは、下位互換性のために残されているレガシ テクノロジです。新規の開発には使用しないでください。Client activation is a legacy technology that is retained for backward compatibility but is not recommended for new development. 分散アプリケーションは、代わりに Windows Communication Foundation (WCF) を使用する必要があります。Distributed applications should instead use Windows Communication Foundation.

戻り値

typeName で指定したオブジェクトのインスタンス。An instance of the object specified by typeName.

例外

assemblyName または typeNamenull です。assemblyName or typeName is null.

一致するコンストラクターが見つかりませんでした。No matching constructor was found.

typenameassemblyName に見つかりませんでした。typename was not found in assemblyName.

assemblyName が見つかりませんでした。assemblyName was not found.

呼び出し元には、このコンストラクターを呼び出すアクセス許可がありません。The caller does not have permission to call this constructor.

呼び出し元は、MarshalByRefObject を継承しないオブジェクトのアクティベーション属性を提供できません。The caller cannot provide activation attributes for an object that does not inherit from MarshalByRefObject.

アンロードされたアプリケーション ドメインで操作しようとします。The operation is attempted on an unloaded application domain.

assemblyName は正しいアセンブリではありません。assemblyName is not a valid assembly.

または-or- 現在読み込まれているバージョンよりも新しいバージョンの共通言語ランタイムで、assemblyName がコンパイルされました。assemblyName was compiled with a later version of the common language runtime than the version that is currently loaded.

アセンブリまたはモジュールが、2 つの異なる証拠を使用して 2 回読み込まれました。An assembly or module was loaded twice with two different evidences.

次の例では、使用、ignoreCaseパラメーター。The following sample demonstrates the use of the ignoreCase parameter.

using namespace System;
using namespace System::Reflection;
static void InstantiateINT32( bool ignoreCase )
{
   try
   {
      AppDomain^ currentDomain = AppDomain::CurrentDomain;
      Object^ instance = currentDomain->CreateInstanceAndUnwrap( 
         "mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", 
         "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!
}

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, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
            "SYSTEM.INT32",
            ignoreCase,
            BindingFlags.Default,
            null,
            null,
            null,
            null,
            null
         );
         Console.WriteLine(instance.GetType());
      } catch (TypeLoadException e) {
         Console.WriteLine(e.Message);
      }
   }
}
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, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", _
            "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

注釈

これは、結合メソッドはCreateInstanceObjectHandle.Unwrapします。This is a convenience method that combines CreateInstance and ObjectHandle.Unwrap.

参照してくださいAssemblyNameの形式に関するassemblyNameします。See AssemblyName for the format of assemblyName. 参照してください、Type.FullNameプロパティの形式に関するtypeNameします。See the Type.FullName property for the format of typeName.

注意

メソッドへの事前バインディングされた呼び出しを行った場合M型のオブジェクトのT1によって返されたCreateInstanceAndUnwrap、メソッドは、型のオブジェクトのメソッドへの事前バインディングされた呼び出しをおよびT2アセンブリでC以外、現在のアセンブリまたはアセンブリを含むT1、アセンブリCは現在のアプリケーション ドメインに読み込まれます。If you make an early-bound call to a method M of an object of type T1 that was returned by CreateInstanceAndUnwrap, and that method makes an early-bound call to a method of an object of type T2 in an assembly C other than the current assembly or the assembly containing T1, assembly C is loaded into the current application domain. 事前バインディングされた呼び出し場合でも、この読み込みが行われますT1.M()の本体で行われた、 DynamicMethod、またはその他の動的に生成されたコード。This loading occurs even if the early-bound call to T1.M() was made in the body of a DynamicMethod, or in other dynamically generated code. 現在のドメインが既定のドメイン、アセンブリがかどうかCプロセスが終了するまでアンロードすることはできません。If the current domain is the default domain, assembly C cannot be unloaded until the process ends. 後で、現在のドメインがアセンブリの読み込みを試みるとC負荷が失敗する可能性があります。If the current domain later attempts to load assembly C, the load might fail.

セキュリティ

FileIOPermissionAccess
アセンブリ マニフェストを含むファイルの読み取りに必要なアクセス許可。for the ability to read the file containing the assembly manifest. 関連付けられた列挙体。 ReadAssociated enumeration: Read

WebPermission
アセンブリがローカルでない場合、アセンブリの場所にアクセスする機能。for the ability to access the location of the assembly if the assembly is not local.

SecurityPermission
デリゲートのインスタンスを作成するときに、アンマネージ コードを呼び出す機能。for the ability to call unmanaged code when creating an instance of a delegate. 関連付けられた列挙体。 UnmanagedCodeAssociated enumeration: UnmanagedCode

ReflectionPermission
すべての型のメンバーに対して操作を呼び出す権限です。for the ability to invoke operations on all type members. 関連付けられた列挙体。 MemberAccessAssociated enumeration: MemberAccess

こちらもご覧ください

CreateInstanceAndUnwrap(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[], Evidence) CreateInstanceAndUnwrap(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[], Evidence) CreateInstanceAndUnwrap(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[], Evidence)

警告

この API は現在使われていません。

指定した型の新しいインスタンスを作成します。Creates a new instance of the specified type. 型の名前、およびその検索方法と作成方法をパラメーターで指定します。Parameters specify the name of the type, and how it is found and created.

public:
 System::Object ^ CreateInstanceAndUnwrap(System::String ^ assemblyName, System::String ^ typeName, bool ignoreCase, System::Reflection::BindingFlags bindingAttr, System::Reflection::Binder ^ binder, cli::array <System::Object ^> ^ args, System::Globalization::CultureInfo ^ culture, cli::array <System::Object ^> ^ activationAttributes, System::Security::Policy::Evidence ^ securityAttributes);
[System.Obsolete("Use an overload that does not take an Evidence parameter")]
[System.Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstanceAndUnwrap which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public object CreateInstanceAndUnwrap (string assemblyName, string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, object[] args, System.Globalization.CultureInfo culture, object[] activationAttributes, System.Security.Policy.Evidence securityAttributes);
member this.CreateInstanceAndUnwrap : string * string * bool * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo * obj[] * System.Security.Policy.Evidence -> obj

パラメーター

assemblyName
String String String String

アセンブリの表示名。The display name of the assembly. 以下を参照してください。FullNameSee FullName.

typeName
String String String String

要求する型の完全修飾名。アセンブリは指定せずに、名前空間だけを指定します。この名前は、FullName プロパティによって返されます。The fully qualified name of the requested type, including the namespace but not the assembly, as returned by the FullName property.

ignoreCase
Boolean Boolean Boolean Boolean

検索で大文字と小文字を区別するかどうかを指定する Boolean 値。A Boolean value specifying whether to perform a case-sensitive search or not.

bindingAttr
BindingFlags BindingFlags BindingFlags BindingFlags

typeName コンストラクターの検索に影響を与える 0 個以上のビット フラグの組み合わせ。A combination of zero or more bit flags that affect the search for the typeName constructor. bindingAttr が 0 の場合は、大文字と小文字を区別してパブリック コンストラクターを検索します。If bindingAttr is zero, a case-sensitive search for public constructors is conducted.

binder
Binder Binder Binder Binder

バインディング、引数型の強制変換、メンバーの呼び出し、および、リフレクションを使用した MemberInfo オブジェクトの取得を有効にするオブジェクト。An object that enables the binding, coercion of argument types, invocation of members, and retrieval of MemberInfo objects using reflection. binder が null の場合は、既定のバインダーが使用されます。If binder is null, the default binder is used.

args
Object[]

コンストラクターに渡される引数。The arguments to pass to the constructor. この引数の配列は、呼び出すコンストラクターのパラメーターに対して、数、順序、および型を一致させる必要があります。This array of arguments must match in number, order, and type the parameters of the constructor to invoke. 既定のコンストラクターを優先する場合は、args を空の配列または null にする必要があります。If the default constructor is preferred, args must be an empty array or null.

culture
CultureInfo CultureInfo CultureInfo CultureInfo

型の強制変換を制御するために使用するカルチャ固有のオブジェクト。A culture-specific object used to govern the coercion of types. culturenull の場合は、現在のスレッドの CultureInfo が使用されます。If culture is null, the CultureInfo for the current thread is used.

activationAttributes
Object[]

アクティべーションに参加できる 1 つ以上の属性の配列。An array of one or more attributes that can participate in activation. 通常、リモート オブジェクトをアクティブ化するために必要な URL を指定する 1 つの UrlAttribute オブジェクトを含む配列。Typically, an array that contains a single UrlAttribute object that specifies the URL that is required to activate a remote object.

このパラメーターは、クライアント側でアクティブ化されるオブジェクトに関連しています。This parameter is related to client-activated objects. クライアント アクティベーションは、下位互換性のために残されているレガシ テクノロジです。新規の開発には使用しないでください。Client activation is a legacy technology that is retained for backward compatibility but is not recommended for new development. 分散アプリケーションは、代わりに Windows Communication Foundation (WCF) を使用する必要があります。Distributed applications should instead use Windows Communication Foundation.

securityAttributes
Evidence Evidence Evidence Evidence

typeName の作成を承認するために使用される情報。Information used to authorize creation of typeName.

戻り値

typeName で指定したオブジェクトのインスタンス。An instance of the object specified by typeName.

例外

assemblyName または typeNamenull です。assemblyName or typeName is null.

一致するコンストラクターが見つかりませんでした。No matching constructor was found.

typenameassemblyName に見つかりませんでした。typename was not found in assemblyName.

assemblyName が見つかりませんでした。assemblyName was not found.

呼び出し元には、このコンストラクターを呼び出すアクセス許可がありません。The caller does not have permission to call this constructor.

呼び出し元は、MarshalByRefObject を継承しないオブジェクトのアクティベーション属性を提供できません。The caller cannot provide activation attributes for an object that does not inherit from MarshalByRefObject.

アンロードされたアプリケーション ドメインで操作しようとします。The operation is attempted on an unloaded application domain.

assemblyName は正しいアセンブリではありません。assemblyName is not a valid assembly.

または-or- 共通言語ランタイムのバージョン 2.0 以降が現在読み込まれています。assemblyName は、より新しいバージョンでコンパイルされています。Version 2.0 or later of the common language runtime is currently loaded and assemblyName was compiled with a later version.

アセンブリまたはモジュールが、2 つの異なる証拠を使用して 2 回読み込まれました。An assembly or module was loaded twice with two different evidences.

次の例では、使用、ignoreCaseパラメーター。The following sample demonstrates the use of the ignoreCase parameter.

using namespace System;
using namespace System::Reflection;
static void InstantiateINT32( bool ignoreCase )
{
   try
   {
      AppDomain^ currentDomain = AppDomain::CurrentDomain;
      Object^ instance = currentDomain->CreateInstanceAndUnwrap( 
         "mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", 
         "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!
}

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, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
            "SYSTEM.INT32",
            ignoreCase,
            BindingFlags.Default,
            null,
            null,
            null,
            null,
            null
         );
         Console.WriteLine(instance.GetType());
      } catch (TypeLoadException e) {
         Console.WriteLine(e.Message);
      }
   }
}
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, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", _
            "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

注釈

これは、結合メソッドはCreateInstanceObjectHandle.Unwrapします。This is a convenience method that combines CreateInstance and ObjectHandle.Unwrap.

参照してくださいAssemblyNameの形式に関するassemblyNameします。See AssemblyName for the format of assemblyName. 参照してください、Type.FullNameプロパティの形式に関するtypeNameします。See the Type.FullName property for the format of typeName.

注意

メソッドへの事前バインディングされた呼び出しを行った場合M型のオブジェクトのT1によって返されたCreateInstanceAndUnwrap、メソッドは、型のオブジェクトのメソッドへの事前バインディングされた呼び出しをおよびT2アセンブリでC以外、現在のアセンブリまたはアセンブリを含むT1、アセンブリCは現在のアプリケーション ドメインに読み込まれます。If you make an early-bound call to a method M of an object of type T1 that was returned by CreateInstanceAndUnwrap, and that method makes an early-bound call to a method of an object of type T2 in an assembly C other than the current assembly or the assembly containing T1, assembly C is loaded into the current application domain. 事前バインディングされた呼び出し場合でも、この読み込みが行われますT1.M()の本体で行われた、 DynamicMethod、またはその他の動的に生成されたコード。This loading occurs even if the early-bound call to T1.M() was made in the body of a DynamicMethod, or in other dynamically generated code. 現在のドメインが既定のドメイン、アセンブリがかどうかCプロセスが終了するまでアンロードすることはできません。If the current domain is the default domain, assembly C cannot be unloaded until the process ends. 後で、現在のドメインがアセンブリの読み込みを試みるとC負荷が失敗する可能性があります。If the current domain later attempts to load assembly C, the load might fail.

セキュリティ

FileIOPermissionAccess
アセンブリ マニフェストを含むファイルの読み取りに必要なアクセス許可。for the ability to read the file containing the assembly manifest. 関連付けられた列挙体。 ReadAssociated enumeration: Read

WebPermission
アセンブリがローカルでない場合、アセンブリの場所にアクセスする機能。for the ability to access the location of the assembly if the assembly is not local.

SecurityPermission
証拠とアセンブリの読み込み。to load an assembly with evidence. ControlEvidence (関連する列挙体)Associated enumeration: ControlEvidence.

ReflectionPermission
すべての型のメンバーに対して操作を呼び出す権限です。for the ability to invoke operations on all type members. 関連付けられた列挙体。 MemberAccessAssociated enumeration: MemberAccess

こちらもご覧ください

適用対象