Export (0) Print
Expand All

AppDomainSetup.DynamicBase Property

Gets or sets the directory where dynamically generated files are stored and accessed.

[Visual Basic]
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);

Property Value

A String that specifies the directory containing dynamic assemblies.

Implements

IAppDomainSetup.DynamicBase

Exceptions

Exception Type Condition
MemberAccessException The ApplicationName is not being set before the DynamicBase is set.
SecurityException The caller does not have the required permission.

Remarks

When an AppDomain is created, a directory called the Dynamic Directory can be specified to store dynamic assemblies. This directory is logically located under the ApplicationBase, although it can reside in another part of the directory.

This property cannot be changed after the AppDomain has finished its first bind.

Example

[Visual Basic] 
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] No example is available for JScript. To view a Visual Basic, C#, or C++ example, click the Language Filter button Language Filter in the upper-left corner of the page.

Requirements

Platforms: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 family

.NET Framework Security: 

See Also

AppDomainSetup Class | AppDomainSetup Members | System Namespace

Show:
© 2015 Microsoft