AppDomainSetup.DynamicBase 属性
获取或设置动态生成的文件所在的目录的基目录。
**命名空间:**System
**程序集:**mscorlib(在 mscorlib.dll 中)
语法
声明
Public Property DynamicBase As String
用法
Dim instance As AppDomainSetup
Dim value As String
value = instance.DynamicBase
instance.DynamicBase = value
public string DynamicBase { get; set; }
public:
virtual property String^ DynamicBase {
String^ get () sealed;
void set (String^ value) sealed;
}
/** @property */
public final String get_DynamicBase ()
/** @property */
public final void set_DynamicBase (String value)
public final function get DynamicBase () : String
public final function set DynamicBase (value : String)
属性值
一个指定 AppDomain.DynamicDirectory 所在目录的 String。
备注
当创建 AppDomain 时,可以指定名为“动态目录”的目录来存储动态程序集。此目录在逻辑上位于 ApplicationBase 下,尽管它可以驻留在该目录的其他部分。
示例
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
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");
}
}
}
using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
// SetDynamicBase.exe
int main()
{
array<String^>^args = Environment::GetCommandLineArgs();
// Create a new AppDomain.
AppDomainSetup^ setup = gcnew AppDomainSetup;
// Need to set the application name before setting the dynamic base.
setup->ApplicationName = "MyApplication";
AppDomain^ domain = AppDomain::CreateDomain( "MyDomain", nullptr, 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 = gcnew AssemblyName;
asmName->Name = "DynamicHelloWorld";
AssemblyBuilder^ asmb = AppDomain::CurrentDomain->DefineDynamicAssembly( asmName, AssemblyBuilderAccess::Save, dynamicDir );
// Define a dynamic module in the assembly.
ModuleBuilder^ mod;
mod = asmb->DefineDynamicModule( "DynamicHelloWorld", "DynamicHelloWorld.dll" );
// Define the S"HelloWorld" type in the module.
TypeBuilder^ typ = mod->DefineType( "HelloWorld", TypeAttributes::Public );
// Define the S"SayHello" method.
MethodBuilder^ meth = typ->DefineMethod( "SayHello", MethodAttributes::Public, nullptr, nullptr );
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.
asmb->Save( "DynamicHelloWorld.dll" );
// Launch MyExecutable.exe, which will load DynamicHelloWorld.dll.
domain->ExecuteAssembly( "MyExecutable.exe" );
}
.NET Framework 安全性
- FileIOPermission 用于访问路径信息。关联的枚举:PathDiscovery。
平台
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 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求。
版本信息
.NET Framework
受以下版本支持:2.0、1.1、1.0