错误: 您正在调试 X.dll 的发布版本

背景资料

我有一个 ASP.NET MVC 应用程序项目,以及 VisualStudio 解决方案中的各种其他项目。不同的项目使用 NPoco 库的不同版本如下:

  • MVC 项目包括一个通过 NuGet 实现的 NPoco 版本。
  • 其他一些项目通过引用 DLL (而不是 NuGet 提供的 DLL)包括(可能不同的) NPoco 版本。
  • 其中一个项目是 NPoco 版本的源代码,并做了一些修改。

我使用的是 Visual Studio 2015 Update 314.0.25422.01。

错误

由于某种原因,当我使用 VisualStudio 中的常规 Start Debug 命令在调试器中启动此应用程序时,它会启动,但它也会产生以下警告:

You are debugging a Release build of NPoco.dll. Using Just My Code with Release builds using compiler optimizations results in a degraded debugging experience (e.g. breakpoints will not be hit).

如果我按 继续调试,一切似乎仍然像往常一样工作,包括断点。

这个问题最近才开始出现。

提问

  1. 有人知道是什么导致了上述错误吗?
  2. 我有什么配置错误吗?
73377 次浏览

我发现,当您更新一个依赖于引用项目(您可能已经修改了版本)的 Nuget 包时,它会用 dll 的 Nuget 版本替换它。

为了在更新(或添加)你的 nuget 包之后修复这个问题,你需要删除对 dll 的引用(例如 NPoco) ,并在修改后的版本中为项目添加一个项目引用。

只是有一个类似的问题,我能够通过清理我的解决方案3次和重建修复。希望这也能帮到其他人。

如果有人仍然有这个问题,对我来说,这是因为我混淆了 GAC 安装软件,我试图调试。

核聚变记录仪帮我搞清楚了。

在我的案例中,我为我的项目删除了 Webapplication.dll,并删除了发布文件夹中的内容。重建项目再次和它的工程为我。

“优化代码”选项在可视化工作室项目级别。删除调试模式。

这种情况在 VS2017中发生过,甚至在将配置更改为 Build 之后也是如此

右键单击 解决方案 > 属性 > 配置管理器 > 活动解决方案配置: 新建
为新的解决方案配置命名。从“调试”中复制设置。

我为这个错误做了所有的事情,但是只有这个解决方案起作用了。

在我的例子中,一些狡猾的骗子把这个放到 AssemblyInfo.cs 文件中:

[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]

把它评论出来,它就开始工作了

这个问题的另一个原因是下面的“汇编级别”属性:

[assembly: System.Diagnostics.Debuggable(true, false)]

(我只是偶然发现了这一点... ... 当一个人遇到这样的问题时,谁会检查 AssemblyInfo.cs... ... 对——没有人)

Edit: 刚刚看到有人已经添加了这个属性... ... (虽然还有其他参数)-还有-这个属性的原因也是“从 exe 反编译”(我们丢失了那个特定项目的源代码:-/)

这是一个典型的 Microsoft 错误,可能有20个解决方案。对我来说,我重新启动了运行2017年视觉工作室的服务器,它解决了这个问题。

我今天第一次遇到这个问题(在 VisualStudio2017中)。对我来说,这是由我的应用程序的不同版本造成的,它是以发布模式构建的,运行在我正在调试的 IIS 中的相同应用程序池下。我为不同版本的应用程序提供了自己的应用程序池,这样问题就消失了。

这种情况发生在我使用 NuGet 软件包时。

假设您想调试来自 Project1的代码..。

如果解决方案中的任何项目(。Sln) ,请确保将其删除。与其添加 Project1的 NuGet 包,不如添加 Project1(。Csproj)直接作为对解决方案中需要 Project1的任何给定项目的引用。通过这种方式,您可以在调试的同时逐步完成代码,而且 VisualStudio 不会再对“发布”版本大喊大叫。

如果 Project1来自不同的解决方案(。Sln) ,您可以右键单击当前解决方案,然后选择“添加现有项目”... 例如,选择 Project1.csproj。然后转到任何需要 Project1 = > 右击 = > Add = > Reference 的项目,选择 Project1

我在 VisualStudio2019中也遇到了类似的问题 以下步骤解决了我的问题 Debug-> Options-> Uncheck Enable Just my code 选项

在将我的项目移动到一台新机器上之后,我也遇到了同样的问题。

下载适当的 Target 框架对我来说很有用。我的项目使用。NetFramework4.7.2下载后,错误消失了。Net Framework 4.7.2.

右键单击解决方案并选择“属性”。

然后,转到左侧的 ConfigurationProperties,并在其下选择 Configuration。 确保您正在运行的项目的配置是在“调试”中,而不是在“发布”中。

如果配置是在’发布’你会得到这个错误。

我试过了。 清理整个溶液, 重建整个解决方案, 重新启动 Visual Studio..。 但是没有帮助。

终于,

我重启了我的电脑

然后开始视觉工作室,清洁和重建,然后调试工作完美无缺:)

对我来说,这一切都是在中午发生的。

尝试清理,删除所有的 BIN 和 OBJ 文件夹... 没有工作。

为了修复它,我不得不停止/启动 ASP.NET 解决方案的 IIS 应用程序池。

关闭和重新启动视觉工作室为我工作

ProjectName.csproj.user有一些高级设置。删除后,它工作

在我的例子中,我检查了调试构建配置的 Optimize 代码。确保所有项目的所有调试配置都未选中此选项。

enter image description here

在阅读了上面的无数解决方案之后,我退出了 VS 并重新启动了它。是的,没错,我一次又一次地关机。而且,是的,成功了。

简短回答(FIX) :

在工具-> 选项-> 调试-> 常规中启用 抑制模块负载的 JIT 优化选项

Enable this option

原因是: 如果试图调试代码,则在代码未经优化时更容易。当代码被优化时,编译器和运行时对发出的 CPU 代码进行更改,以便它运行得更快,但是与原始源代码的映射不太直接。如果映射不那么直接,调试器通常无法告诉您本地变量的值,代码单步执行和断点可能无法像您预期的那样工作。

工作原理: 调试器公开一个选项,该选项控制使用优化编译的 DLL 在目标进程内启用加载时发生的情况。如果未选中此选项(默认状态) ,则当。NET 运行时将 MSIL 代码编译成 CPU 代码,它保持启用优化。如果选中该选项,则调试器请求禁用优化。

更多信息

  1. 关闭 VS
  2. 删除项目中的所有 bin 和 obj 文件夹

用于删除所有 bin 和 obj 文件夹和文件的 PowerShell 代码片段:

Get-ChildItem .\ -include bin,obj -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse }