代码之家  ›  专栏  ›  技术社区  ›  David S.

默认搜索基目录不是appDomain.base directory?

  •  0
  • David S.  · 技术社区  · 14 年前

        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 回复  |  直到 14 年前
        1
  •  0
  •   Hans Passant    14 年前

    由Windows维护的进程的当前目录(Environment.current directory)是 受AppDomainSetup的影响。它只影响CLR查找程序集的位置。更改CurrentDirectory将改变整个进程,这肯定不是您想要的。

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

        2
  •  1
  •   Tim Carter    14 年前

    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); 
    

    在我的代码中,您的操作方法实现已移动到构造函数。