【问题标题】:Exception on opening DataSet Visualizer due to the AssemblyResolve event由于 AssemblyResolve 事件,打开 DataSet Visualizer 时出现异常
【发布时间】:2020-06-03 00:53:41
【问题描述】:

在我的 .Net Core 3.1 WPF 项目中尝试在我的DataSetDataTable 之一上使用放大镜时,我得到一个带有以下文本的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)

我将导致此问题的原因缩小到我最近实现的在运行时从子文件夹加载程序集的方法,这是我根据 Reza Aghaei 在上一个问题上的answer 编写的。

将其范围缩小到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 对我来说至关重要。

有什么建议吗?

编辑:调试期间数据集可视化器的使用:

【问题讨论】:

  • 如何使用DataSet Visualizer?在运行时?
  • 嗨。谢谢你快速的回复。我添加了一个图像作为我在调试期间尝试使用 DataSet Visualizer 的方式。我做了一个空的示例项目,但注意到你的代码来自我的另一个问题。如果我将throw new Exception($"'{name}' Not found"); 更改为return null;,它似乎可以工作,尽管我担心这可能是该方法的初始使用问题。

标签: c# wpf visual-studio .net-core reflection


【解决方案1】:

这不是一个优雅的解决方案,但作为解除对调试会话的阻塞的一种解决方法,请将以下内容添加到 AssemblyResolve 事件处理程序的开头:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-16
    • 2011-10-21
    • 2017-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多