Есть решение с двумя проектами
DLL библиотека
WPF приложение, использующее DLL в References
При компилировании проекта WPF, DLL помещается в папку с EXE. Однако по независимым от меня причинам необходимо что бы WPF приложение искало эту DLL в папке [номер версии] в папке приложения т.е.:
Если приложение находится в папке c:\MyProject\project.exe, а у файла версия 1.0.3.24 значит DLL будет находиться в c:\MyProject\1.0.3.24\MyLibrary.dll
Вот моё решение:
Свойство Build Action у App.xaml установил в Page, а в App.xaml.cs добавил код.
[STAThread]
public static void Main()
{
try
{
//Берём Assembly приложения
System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
//Берём папку приложения
string appDirectory = System.IO.Path.GetDirectoryName(assembly.Location);
//Берём версию приложения
string appVersion = System.Diagnostics.FileVersionInfo.GetVersionInfo(assembly.Location).FileVersion;
//Вычисляем папку с DLL
string dllpatch = System.IO.Path.Combine(appDirectory, appVersion);
//Берем переменную окружения PATH
string environmentPATH = Environment.GetEnvironmentVariable("PATH");
//Устанавливаем переменную окружения PATH
Environment.SetEnvironmentVariable("PATH", environmentPATH + ";" + dllpatch, EnvironmentVariableTarget.Process);
//Запускаем приложение
var application = new App();
application.InitializeComponent();
application.Run();
}
catch (Exception ex)
{
//Эта строка не срабатывает, Exeption не отлавливается
System.Diagnostics.EventLog.WriteEntry("MyApplication", ex.Message + "
" + ex.StackTrace, System.Diagnostics.EventLogEntryType.Error);
}
}
Однако, при запуске проекта всё нормально, но как только я помещаю dll в вышеуказанную папку try catch не срабатывает, приложение сваливается в исключение, а лог винды выводиться:
Приложение: project.exe Версия платформы:
v4.0.30319 Описание. Процесс был завершен из-за необработанного
исключения. Сведения об исключении: System.IO.FileNotFoundException
в MyNameSpace.App.Main()
Ответ
Попробуй воспользоваться codeBase в app.config.
Еще есть
Комментариев нет:
Отправить комментарий