Определить место сборки - PullRequest
0 голосов
/ 26 июня 2011

У меня есть проект с именем A, расположенный в C: \ ProjectA. Он ссылается на DLL-файл под названием B.dll, расположенный в C: \ Binaries.

Теперь B.dll должен динамически загрузить вторую DLL-библиотеку с именем C.DLL, которая находится в той же папке (C: \ Binaries). Но как B может определить местоположение C?

Я знаю о AppDomain.CurrentDomain.BaseDirectory и Assembly.GetExecutingAssembly (). Location, но оба возвращают 'C: \ ProjectA \', потому что B.dll был загружен A.exe.

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

Редактировать: Извините, дубликат Как мне получить путь к сборке, в которой находится код?

Ответы [ 2 ]

1 голос
/ 26 июня 2011

Начиная с MSDN , вы должны протестировать его на основе типа, существующего в C (или B):

Assembly assembly = Assembly.GetAssembly(yourVar.GetType());
//your location will be in assembly.Location
Console.WriteLine("Location=" + assembly.Location);
0 голосов
/ 26 июня 2011

Как насчет использования Assembly.GetCallingAssembly от B? Это вернет объект Assembly метода, который вызвал текущий выполняемый метод. (т. е. B)

public void BMethod()
{
     var assembly = Assembly.GetCallingAssembly();
     string path = assembly.Location;
      //now use this path to load C.dll in the same folder.

}

см. Также этот аналогичный вопрос переполнения стека

...