Работа под отладчиком подавляет сбой загрузки сборки?

У меня есть проект, который является надстройкой к Autodesk Revit и ссылается на библиотеку, в которой есть определенные элементы управления и словари стилей. У меня есть простой диалог прогресса, который ссылается на словарь стиля, как это:

<ResourceDictionary Source="pack://application:,,,/BIT.GraphicElements;component/BITCoreStyles.xaml" />

Я запустил это в режиме отладки, работая над ним, и он работает нормально, теперь я обнаруживаю, что в установленной версии (все еще на стадии тестирования, еще не выпущенной) выдается ошибка загрузки сборки для этой библиотеки.

Я провел некоторое тестирование, и вот странная часть; если я работаю под отладчиком, это нормально, если я работаю вне отладчика, это выдает ошибку. В этом нет никакой разницы в сборках выпуска и отладки, и да, DLL находится в каталоге выполнения. В моем последнем тесте я запускался в режиме отладки с установленным Revit для ссылки на папку отладки, поэтому он загружается оттуда и работает нормально. Затем я остановил отладчик, НИЧЕГО не сделал (без перестройки, без изменения конфигурации Revit, ничего) и перезапустил Revit. Это означает, что Revit должен получать доступ к точно такой же сборке из тех же файлов в том же месте, что и последний запуск, но на этот раз не находился в режиме отладки, и я получил ошибку.

Я смог это исправить, создав при запуске обработчик событий для AssemblyResolve в текущем домене, а затем вручную загрузил его оттуда так:

Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
    string loc = Path.GetDirectoryName(typeof(CMApp).Assembly.Location);
    if (string.IsNullOrEmpty(args.Name) || !args.Name.Contains(",")) return null;

    int indx = args.Name.IndexOf(",", StringComparison.Ordinal);
    if (indx <= 0 || string.IsNullOrEmpty(loc)) return null;
    string asmName = args.Name.Substring(0, indx) + ".dll";
    string fileName = Path.Combine(loc, asmName);

    return File.Exists(fileName) ? Assembly.LoadFrom(fileName) : null;
}

Как только я это делаю, кажется, что загружается правильно без ошибки, но я не понимаю, почему. Так что в образовательных целях и чтобы я мог лучше понять систему, может ли кто-нибудь сказать мне, почему он не находит файл сам по себе с обычными методами загрузки и почему мне нужно загрузить его вручную?

0 ответов

Другие вопросы по тегам