AppDomainSetup.DynamicBase プロパティ

動的に生成したファイルが格納され、アクセスされるディレクトリを取得または設定します。

Public Overridable Property DynamicBase As String  Implements _   IAppDomainSetup.DynamicBase
[C#]
public virtual string DynamicBase {get; set;}
[C++]
public: __property virtual String* get_DynamicBase();public: __property virtual void set_DynamicBase(String*);
[JScript]
public function get DynamicBase() : String;public function set DynamicBase(String);

プロパティ値

動的アセンブリを格納するディレクトリを指定する String

実装

IAppDomainSetup.DynamicBase

例外

例外の種類 条件
MemberAccessException DynamicBase が設定されるまで、ApplicationName は設定されません。
SecurityException 呼び出し元に、必要なアクセス許可がありません。

解説

AppDomain を作成するときに、動的アセンブリを Dynamic Directory と呼ばれるディレクトリに格納するように指定できます。このディレクトリは、ディレクトリの他の部分に配置できますが、論理的には ApplicationBase の下に配置されます。

このプロパティは、 AppDomain が最初のバインドを終了した後は変更できません。

使用例

 
Imports System
Imports System.Reflection
Imports System.Reflection.Emit



Class ADDynamicBase
   
   ' SetDynamicBase.exe
   Overloads Shared Sub Main(args() As String)
      ' Create a new AppDomain.
      Dim setup As New AppDomainSetup()
      ' Need to set the application name before setting the dynamic base.
      setup.ApplicationName = "MyApplication"
      Dim domain As AppDomain = AppDomain.CreateDomain("MyDomain", Nothing, setup)
      
      ' Tell the domain to search for assemblies in DynamicAssemblyDir.
      domain.SetDynamicBase("C:\DynamicAssemblyDir")
      
      ' Note that the actual dynamic directory has the form
      ' <DynamicBase>\<number>\<ApplicationName>, rather than
      ' simply <DynamicBase>.
      Dim dynamicDir As [String] = domain.DynamicDirectory
      ' The AssemblyBuilder won't create this directory automatically.
      If Not System.IO.Directory.Exists(dynamicDir) Then
         System.IO.Directory.CreateDirectory(dynamicDir)
      End If
      
      ' Define the dynamic assembly.
      Dim asmName As New AssemblyName()
      asmName.Name = "DynamicHelloWorld"
      Dim asm As AssemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(asmName, AssemblyBuilderAccess.Save, dynamicDir)
      
      ' Define a dynamic module in the assembly.
      Dim [mod] As ModuleBuilder
      [mod] = asm.DefineDynamicModule("DynamicHelloWorld", "DynamicHelloWorld.dll")
      
      ' Define the "HelloWorld" type in the module.
      Dim typ As TypeBuilder = [mod].DefineType("HelloWorld", TypeAttributes.Public)
      
      ' Define the "SayHello" method.
      Dim meth As MethodBuilder = typ.DefineMethod("SayHello", MethodAttributes.Public, Nothing, Nothing)
      Dim il As ILGenerator = meth.GetILGenerator()
      il.EmitWriteLine("Hello World!")
      il.Emit(OpCodes.Ret)
      
      ' Complete the HelloWorld type.
      typ.CreateType()
      
      ' Save the assembly to the dynamic assembly directory.
      asm.Save("DynamicHelloWorld.dll")
      
      ' Launch MyExecutable.exe, which will load DynamicHelloWorld.dll.
      domain.ExecuteAssembly("MyExecutable.exe")
   End Sub 'Main
End Class 'ADDynamicBase

[C#] 
using System;
using System.Reflection;
using System.Reflection.Emit;

namespace AppDomainSnippets
{
    class ADDynamicBase
    {
        // SetDynamicBase.exe
        static void Main(string[] args)
        {
            // Create a new AppDomain.
            AppDomainSetup setup = new AppDomainSetup();
            // Need to set the application name before setting the dynamic base.
            setup.ApplicationName = "MyApplication";
            AppDomain domain = AppDomain.CreateDomain("MyDomain", null, setup);

            // Tell the domain to search for assemblies in DynamicAssemblyDir.
            domain.SetDynamicBase("C:\\DynamicAssemblyDir");
            
            // Note that the actual dynamic directory has the form
            // <DynamicBase>\<number>\<ApplicationName>, rather than
            // simply <DynamicBase>.
            String dynamicDir = domain.DynamicDirectory;
            // The AssemblyBuilder won't create this directory automatically.
            if(!System.IO.Directory.Exists(dynamicDir))
            {
                System.IO.Directory.CreateDirectory(dynamicDir);
            }

            // Define the dynamic assembly.
            AssemblyName asmName = new AssemblyName();
            asmName.Name = "DynamicHelloWorld";
            AssemblyBuilder asm = AppDomain.CurrentDomain.DefineDynamicAssembly
                (asmName, AssemblyBuilderAccess.Save, dynamicDir);

            // Define a dynamic module in the assembly.
            ModuleBuilder mod;
            mod = asm.DefineDynamicModule
                ("DynamicHelloWorld", "DynamicHelloWorld.dll");

            // Define the "HelloWorld" type in the module.
            TypeBuilder typ = mod.DefineType
                ("HelloWorld", TypeAttributes.Public);

            // Define the "SayHello" method.
            MethodBuilder meth = typ.DefineMethod
                ("SayHello", MethodAttributes.Public, null, null);
            ILGenerator il = meth.GetILGenerator();
            il.EmitWriteLine("Hello World!");
            il.Emit(OpCodes.Ret);

            // Complete the HelloWorld type.
            typ.CreateType();
            
            // Save the assembly to the dynamic assembly directory.
            asm.Save("DynamicHelloWorld.dll");

            // Launch MyExecutable.exe, which will load DynamicHelloWorld.dll.
            domain.ExecuteAssembly("MyExecutable.exe");
        }
    }
}

[C++] 
#using <mscorlib.dll>

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;

// SetDynamicBase.exe
int main() {
    String* args[] = Environment::GetCommandLineArgs();
    // Create a new AppDomain.
    AppDomainSetup* setup = new AppDomainSetup();
    // Need to set the application name before setting the dynamic base.
    setup->ApplicationName = S"MyApplication";
    AppDomain*  domain = AppDomain::CreateDomain(S"MyDomain", 0, setup);

    // Tell the domain to search for assemblies in DynamicAssemblyDir.
    domain->SetDynamicBase(S"C:\\DynamicAssemblyDir");

    // Note that the actual dynamic directory has the form
    // <DynamicBase>\<number>\<ApplicationName>, rather than
    // simply <DynamicBase>.
    String*  dynamicDir = domain->DynamicDirectory;
    // The AssemblyBuilder won't create this directory automatically.
    if (!System::IO::Directory::Exists(dynamicDir)) {
        System::IO::Directory::CreateDirectory(dynamicDir);
    }

    // Define the dynamic assembly.
    AssemblyName* asmName = new AssemblyName();
    asmName->Name = S"DynamicHelloWorld";
    AssemblyBuilder*  asmb = AppDomain::CurrentDomain->DefineDynamicAssembly
        (asmName, AssemblyBuilderAccess::Save, dynamicDir);

    // Define a dynamic module in the assembly.
    ModuleBuilder* mod;
    mod = asmb->DefineDynamicModule
        (S"DynamicHelloWorld", S"DynamicHelloWorld.dll");

    // Define the S"HelloWorld" type in the module.
    TypeBuilder*  typ = mod->DefineType
        (S"HelloWorld", TypeAttributes::Public);

    // Define the S"SayHello" method.
    MethodBuilder*  meth = typ->DefineMethod
        (S"SayHello", MethodAttributes::Public, 0, 0);
    ILGenerator*  il = meth->GetILGenerator();
    il->EmitWriteLine(S"Hello World!");
    il->Emit(OpCodes::Ret);

    // Complete the HelloWorld type.
    typ->CreateType();

    // Save the assembly to the dynamic assembly directory.
    asmb->Save(S"DynamicHelloWorld.dll");

    // Launch MyExecutable.exe, which will load DynamicHelloWorld.dll.
    domain->ExecuteAssembly(S"MyExecutable.exe");
}

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

.NET Framework セキュリティ:

参照

AppDomainSetup クラス | AppDomainSetup メンバ | System 名前空間