gpt4 book ai didi

c# - 为什么我无法调试动态加载的程序集?

转载 作者:可可西里 更新时间:2023-11-01 08:45:56 26 4
gpt4 key购买 nike

我正在开发一个 Web API 项目,该项目使用内部模拟框架来拦截和修改来自 Controller 的响应。它使用 MEF 加载一个程序集,其中包含在满足某些先决条件时执行的代码。

我知道这工作正常,因为我可以在响应中看到模拟已执行,但由于某种原因我无法调试动态加载程序集中的代码。尽管断点看起来很活跃,但执行绝不会在那里中断。

The breakpoint is active

我尝试调用 Debugger.Break(); 它确实中断了,但调用堆栈显示为空,Visual Studio 仅显示此消息:

The application is in break mode

我可以看到程序集及其符号已加载到模块窗口中:

Modules window shows that symbols were loaded correctly

我可以在调用动态加载的程序集(behavior 参数)之前中断,它看起来像这样:

private HttpResponseMessage ApplyBehavior(
IMockBehavior behavior,
string controller, string action,
HttpRequestMessage request,
HttpResponseMessage mockedResponse)
{
return behavior.Apply(controller, action, request, mockedResponse);
}

如果我尝试在即时窗口中检查 behavior 变量,Visual Studio 会显示以下异常:

behavior.GetType()
'behavior.GetType()' threw an exception of type 'System.IO.FileNotFoundException'
Data: {System.Collections.ListDictionaryInternal}
FileName: null
FusionLog: null
HResult: -2147024894
HelpLink: null
InnerException: null
Message: "Cannot load assembly 'SuperMam.WebAPI.Mocking'."
Source: null
StackTrace: null
TargetSite: null

这是一个相当大的应用程序的一部分,我无法提取相关部分。我尝试收集尽可能多的信息,但仍然不知道为什么会这样。

我该怎么做才能解决这个问题?

编辑 1

可以肯定的是,如果我从我的 Controller 调用代码,我可以正常进入它:

var behaviourType = AppDomain.CurrentDomain.GetAssemblies()
.First(a => a.FullName.Contains("SuperMam.WebAPI.Mocking"))
.GetType("SuperMam.WebAPI.Mocking.MyBehaviour");

var behavior = (IMockBehavior)Activator.CreateInstance(behaviourType);
// I can step into this, and view the behaviour variable in the watch
behavior.Apply("dummy", "dummy", Request, null);

但即使我这样做,当模拟框架调用相同的方法时,我也无法进入它。

编辑 2

我还注意到同一个程序集(全名相同)被加载了两次。这两个实例的区别在于它们的 CodeBaseLocation 属性:

  • 其中一个的 CodeBase 等于我的应用程序的 bin 目录,Location 等于 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\...
  • 另一个的 CodeBase 等于第一个的 Location(C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\...), Location 是一个空字符串。

这可能是问题的原因吗?

最佳答案

Your app has entered a break state, but no code is currently executing that is supported by the selected debug engine.

我之前也遇到过这个错误信息:

https://social.msdn.microsoft.com/Forums/en-US/99b43950-6c82-4945-ba16-04355abf9612/vs2015-breakpoints-dont-work?forum=vsdebug

如果可能,您可以检查它是否与调试选项/设置或 VS 设置有关。

(1) VS2015最新更新为更新3。

(2) Enable Use Managed Compatibility Mode 将是解决此问题的目录。

关于c# - 为什么我无法调试动态加载的程序集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40505436/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com