каталог базы поиска по умолчанию не является appDomain.BaseDirectory? - PullRequest
0 голосов
/ 27 октября 2010

Я создал 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());
    }
}

есть файл 'test.txt' в appDomain.BaseDirectory.но если я только даю имя файла, приложение все еще пытается найти файл из каталога выполнения приложения и не может найти файл.

как я могу убедиться, что код, выполненный в другом домене, использует базукаталог в качестве пути поиска по умолчанию.

Ответы [ 2 ]

1 голос
/ 27 октября 2010

возможно, вам нужно использовать один из перегруженных методов 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); 

В моем коде ваша реализация метода действия была перемещена в конструктор.

0 голосов
/ 27 октября 2010

Текущий каталог процесса, поддерживаемый Windows (Environment.CurrentDirectory), равен , а не , на который влияет AppDomainSetup. Это влияет только на то, где CLR будет искать сборки. Изменение CurrentDirectory изменит его во всем процессе, конечно, это не то, что вам нужно.

Работайте с полными путями, как в своем фрагменте.

...