Исключение при открытии DataSet Visualizer из-за события AssemblyResolve - PullRequest
1 голос
/ 19 февраля 2020

При попытке использовать увеличительное стекло на одном из моих DataSet или DataTable в моем . Net Core 3.1 проекте WPF я получаю System.IO.FileLoadException со следующим текстом:

Не удалось загрузить файл или сборку 'DataSetVisualizer.DebuggeeSide, версия = 16.0.0.0, культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a'. Общее исключение (0x80131500)

Трассировка стека:

at System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, RuntimeAssembly assemblyContext, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, AssemblyLoadContext assemblyLoadContext)
at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, StackCrawlMark& stackMark, AssemblyLoadContext assemblyLoadContext)
at System.Reflection.Assembly.Load(AssemblyName assemblyRef, StackCrawlMark& stackMark, AssemblyLoadContext assemblyLoadContext)
at System.Reflection.Assembly.Load(AssemblyName assemblyRef)
at Microsoft.VisualStudio.DebuggerVisualizers.DebuggeeSide.Impl.ClrCustomVisualizerDebuggeeHost..ctor(String debuggeeSideVisualizerTypeName, String debuggeeSideVisualizerAssemblyName, String[] probePaths)
at Microsoft.VisualStudio.DebuggerVisualizers.DebuggeeSide.Impl.ClrCustomVisualizerDebuggeeHost.Create(String debuggeeSideVisualizerTypeName, String debuggeeSideVisualizerAssemblyName, String[] probePaths)

Я сузил причину этой проблемы до моего недавно реализованного метода загрузки сборок из подпапок во время выполнения, который я написал на основе Реза Агаи ответ на мой последний вопрос.

In сузил его до подписки на событие AppDomain.CurrentDomain.AssemblyResolve, но пока не смог найти способ его решить.

AppDomain.CurrentDomain.AssemblyResolve += (obj, arg) =>
{
  var name = $"{new AssemblyName(arg.Name).Name}.dll";
  var assemblyFile = referenceFiles.Where(x => x.EndsWith(name))
        .FirstOrDefault();
  if (assemblyFile != null)
      return Assembly.LoadFrom(assemblyFile);
  throw new Exception($"'{name}' Not found");
};

Не имеет значения, пытаюсь ли я для просмотра DataSet в одной из загруженных сборок или в загрузочном приложении.

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

Есть предложения?

edit: использование визуализатора набора данных во время отладки:

enter image description here

1 Ответ

1 голос
/ 19 февраля 2020

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

#if DEBUG
    if (arg.Name.StartsWith("DataSetVisualizer"))
        return null;
#endif
...