我在我的应用程序中创建了一个appDomain,其基本目录与我的应用程序目录不同,但它位于应用程序之下。我在创建的域中加载了一个程序集,并从该域创建了对象实例。然后我尝试执行该对象的方法。但我观察到一种奇怪的行为。
public class Class1 : MarshalByRefObject
{
public void action()
{
Console.WriteLine(AppDomain.CurrentDomain.BaseDirectory);
TextReader sr = new StreamReader(File.OpenRead(AppDomain.CurrentDomain.BaseDirectory + "\\test.txt"));
Console.WriteLine(sr.ReadToEnd());
}
}
appDomain.BaseDirectory下有一个'test.txt'文件。但如果我只提供文件名,应用程序仍会尝试从应用程序执行目录中搜索该文件,但无法找到该文件。
如何确保在另一个域中执行的代码使用基本目录作为默认搜索路径。
答案 0 :(得分:1)
也许您需要使用其中一个重载的CreateDomain方法并指定基目录。以下适用于我:
AppDomain domain = AppDomain.CreateDomain("MyDomain", AppDomain.CurrentDomain.Evidence, "C:\\Projects\\ConsoleApplication1\\ClassLibrary1\\bin\\Debug\\", ".", true);
ObjectHandle o = domain.CreateInstanceFrom("ClassLibrary1.dll", "ClassLibrary1.Class1");
AppDomain.Unload(domain);
在我的代码中,您的操作方法实现已移至构造函数。
答案 1 :(得分:0)
由Windows(Environment.CurrentDirectory)维护的进程的当前目录不受AppDomainSetup的影响。它只影响CLR查找程序集的位置。改变CurrentDirectory会在整个过程中改变它,当然这不是你想要的。
使用完整路径名称,就像在代码段中一样。