Я могу поймать отсутствие dll ошибка во время загрузки приложения в C#?

Вот как это сделать с TypScript 2.0: (tsd и typings устарели в пользу следующего):

$ npm install --save lodash

# This is the new bit here: 
$ npm install --save-dev @types/lodash

Затем в вашем файле .ts:

Либо:

import * as _ from "lodash";

Или (как предложено @Naitik):

import _ from "lodash";

Я не уверен, в чем разница. Мы используем и предпочитаем первый синтаксис. Однако некоторые сообщают, что первый синтаксис для них не работает, а кто-то еще прокомментировал, что последний синтаксис несовместим с ленивыми загруженными модулями webpack. YMMV.

Редактировать 27 февраля 2017 года:

В соответствии с @Koert ниже import * as _ from "lodash"; является единственным рабочим синтаксисом, указанным в машинописном тексте 2.2.1, lodash 4.17.4 и @ types / lodash 4.14.53. Он говорит, что другой предложенный синтаксис импорта дает ошибку «не имеет экспорта по умолчанию».

24
задан Richard Morgan 10 July 2009 в 18:40
поделиться

3 ответа

Расширение ответа Джоша.

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

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

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

40
ответ дан 28 November 2019 в 22:26
поделиться

Поскольку Приложение форм поместило попытку/выгоду в Program.cs. (Подробно останавливающийся на ответе JaredPat).

Как это:

    [STAThread]
    static void Main()
    {
        try
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
            throw;
        }
    }

Это поймает любые недостающие исключения DLL из Вашего приложения. И они будут выглядеть подобными этому:

не Мог загрузить файл или блок 'TheGreatestDLLEver. Дань, Version=0.0.0.2, Culture=neutral, PublicKeyToken=jamtoastbutter' или одна из его зависимостей. Система не может найти файл определенным.

0
ответ дан 28 November 2019 в 22:26
поделиться

Вы можете использовать AppDomain.CurrentDomain.AssemblyResolve + = new ResolveEventHandler (CurrentDomain_AssemblyResolve);

  Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
    {
    }

Для поиска сборки вручную, если не удается найти ее автоматически.

33
ответ дан 28 November 2019 в 22:26
поделиться
Другие вопросы по тегам:

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