Вопрос по .net, dll, c# – Могу ли я поймать отсутствующую ошибку DLL во время загрузки приложения в C #?

20

Можно ли перехватить исключение, когда не найден указанный DLL-файл?

Например, у меня есть проект на C # со ссылкой на сторонний dll; если эта dll не может быть найдена, выдается исключение. Исключением является System.IO.FileNotFoundException, но я не могу определить, где его перехватить. Следующий код не работает:

static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        try
        {
          // code goes here
        }
        catch (Exception exc)
        {
            MessageBox.Show(exc.ToString());
        }
    }
}

Ваш Ответ

2   ответа
35

Сборки в .Net загружаются по требованию CLR. Обычно загрузка сборки не предпринимается до тех пор, пока метод не будет JIT, который использует тип из этой сборки.

Если вы не можете отловить сбой загрузки сборки с помощью блока try / catch в основном методе, скорее всего, вы используете тип из сборки в try / catch. Таким образом, исключение происходит до того, как метод main будет запущен.

Попробуйте поместить весь код из метода main в другую функцию. Затем вызовите эту функцию в блоке try / catch, и вы должны увидеть исключение.

Эта тонкость - то, чего мне не хватало. Большое спасибо. Richard Morgan
32

AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);

  Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
    {
    }

Чтобы найти сборку вручную, если она не может быть найдена автоматически.

Это отличный совет, даже если он не был принят в качестве ответа.
здесь более объясненоcodeproject.com/Articles/310675/…

Похожие вопросы