Можно ли развернуть DLL в отдельный каталог, чем исполняемый файл для консольного приложения? - PullRequest
1 голос
/ 21 сентября 2010

Есть ли способ в консольном приложении .NET C # развернуть исполняемый файл в каталоге, отличном от того, от которого он зависит?это будет работать у меня следующая структура каталогов.c: \ app \ bin \ sample.exe c: \ app \ dll * .dll

Ответы [ 4 ]

4 голосов
/ 21 сентября 2010

Это довольно неразумно, CLR не может найти DLL без посторонней помощи. Ваш клиент не будет беспокоиться о местонахождении библиотеки DLL. На самом деле, я думаю, что большинство ИТ-специалистов предпочитают двоичные файлы в одном каталоге.

Если вы поместите DLL в подкаталог c:\app\bin\dll, то вы можете использовать файл app.exe.config с элементом <probing>, чтобы сообщить CLR, что нужно искать в этом каталоге. Развертывание на c:\app\dll намного сложнее, оно требует очень непрактичных <codeBase> в <dependentAssembly>. Что делает приложение неподвижным, вместо этого предпочтите решение Пьера. За исключением того, что он требует работы, вы хотите использовать Assembly.GetEntryAssembly().Location, чтобы получить путь установки EXE, чтобы вы могли сгенерировать относительный путь из этого.

2 голосов
/ 21 сентября 2010

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

public static void Main(string[] args)
{
    AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);

    //do something
}

private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
    Assembly.LoadFrom(fileName); // Load assembly from any file
    return assembly;
}

Этот метод вызывается каждый раз, когда не удается найти местоположение вашего файла.Другой вариант - указать каталог в разделе «Путь к ссылке» на странице свойств вашей программы.

0 голосов
/ 21 сентября 2010

Одним из решений может быть развертывание ваших DLL в GAC, Global Assembly Cache.Таким образом, ваше приложение будет загружать их из GAC, а не из каталога приложений.

0 голосов
/ 21 сентября 2010

Вы можете изменить путь вывода ваших DLL, чтобы они помещались в путь, отличный от пути по умолчанию.Это делается на странице Build в Project Designer .

См. Следующую статью: http://msdn.microsoft.com/en-us/library/kb4wyys2%28VS.80%29.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...