Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Если нет dll, которая указана в using


Автор: Lamya 14.1.2011, 12:50
К exe-шнику приложения прилагаются 3 библиотеки. Одна из них указана в перечислении using 
(using System;
using System.Collections.Generic;
using System.Reflection;
using xLib;)
и она в свою очередь не работает без двух других. Необходимо обработать ситуацию отсутствия любой из библиотек.
 Обработка отсутствия двух вспомогательных - таким кодом, здесь вопросов нет.
Код

            Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
            AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;


Если удалить из каталога саму xLib, то приложение запускается, но в процессе возникает окно исключения

************** Текст исключения **************
System.IO.FileNotFoundException: Невозможно загрузить файл или сборку "xLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" или один из зависимых от них компонентов. Не удается найти указанный файл.
Имя файла: "xLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"

Какой обработчик необходимо написать, чтобы вместо окна появлялось обычное текстовое сообщение, как и где перехватить ошибку?

Автор: jonie 14.1.2011, 13:34
Вот это событие обрабатывать: http://msdn.microsoft.com/en-us/library/system.appdomain.assemblyresolve.aspx

Автор: Lamya 14.1.2011, 15:05
Спасибо за ответ. Попробовала через код примера, он почему-то отказался извлечь класс из сборки, но сам факт ее отсутствия находил. В итоге сделала еще проще:

Код

try
            {
                Assembly a = Assembly.Load("xLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null");
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message, "Запуск программы невозможен");
                return;
            }


Там не нужна сложная система контроля ошибок, только сообщение о том, что не все гладко, так что такой вариант вполне сойдет несмотря на его топорность.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)