默认的搜索基础目录不是appDomain.BaseDirectory?

时间:2010-10-27 00:52:40

标签: .net appdomain

我在我的应用程序中创建了一个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'文件。但如果我只提供文件名,应用程序仍会尝试从应用程序执行目录中搜索该文件,但无法找到该文件。

如何确保在另一个域中执行的代码使用基本目录作为默认搜索路径。

2 个答案:

答案 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会在整个过程中改变它,当然这不是你想要的。

使用完整路径名称,就像在代码段中一样。