Работа под отладчиком подавляет сбой загрузки сборки?
У меня есть проект, который является надстройкой к 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;
}
Как только я это делаю, кажется, что загружается правильно без ошибки, но я не понимаю, почему. Так что в образовательных целях и чтобы я мог лучше понять систему, может ли кто-нибудь сказать мне, почему он не находит файл сам по себе с обычными методами загрузки и почему мне нужно загрузить его вручную?