【发布时间】:2017-05-11 13:20:03
【问题描述】:
一段时间以来,我一直在努力解决 Visual Studio 2017 中的一个奇怪问题,但在任何地方都找不到有关它的任何信息。
我目前正在将一个大型遗留应用程序从 .NET 3.5 重构和升级到 .NET 4.6.1。它在 .NET 3.5 中完美执行,但在没有调试器的情况下使用 .NET 4.0 或更高版本作为目标框架执行时会引发错误。
为了调试它,我通过 Visual Studio 在调试模式下运行程序。在调试模式下运行时,尽管诊断工具显示程序活动,但在达到某个类后会忽略单步执行和断点。
Diagnostic Tool
如果不调用被称为 MainMenuForm(并且职责太多)的类,问题就会消失。是调用非静态 MainMenuForm 类中的静态字段还是调用构造函数都没有关系。
我怀疑这个问题与 JIT 编译器发现一些奇怪的东西有关,但预计会引发异常或某种错误。
有没有人在升级到新版本时遇到过类似的问题?
【问题讨论】:
-
假设应用程序由许多程序集组成,是否所有程序集都针对同一个框架并设置为在调试中作为目标运行?
-
确保您已经卸载并清理了以前的版本。这种行为通常意味着正在使用的 DLL 不是您刚刚编译的那个,而是另一个(一个简单的新消息框将确认它)。
-
感谢您的意见。所有 19 个项目都针对相同的框架,并设置为在调试中运行。然而,犯罪者类文件中使用了一些第三方依赖项。我认为 .NET 是向后兼容的,这不会造成问题。但是我会尝试看看如果我一一消除第三方依赖会发生什么。我试图清理解决方案并手动删除 bin 和 obj 文件夹,但这没有帮助
-
@Excavator,您说您从.net 3.5 更新了这个应用程序,是否意味着这个项目是在旧VS 版本中创建的?如果是这样,您在 VS2017 中打开它时是否收到任何警告或错误?不调试您的应用程序,如果您只是构建它或使用“不调试启动(Ctrl + F5)”运行它,是否会收到任何编译错误?您的解决方案中有19个项目,是否与具体项目相关?如果使用“start without debug”运行没有报错,请开启调试菜单下的异常设置,重新调试。
-
好问题。这些项目是在 Visual Studio 2008 中创建的,但是当框架设置为 3.5 或更早版本时,它们可以在 Visual Studio 2017 中完美运行。除了迁移旧解决方案之外,我还创建了一个新解决方案并粘贴了所有源代码。这并没有改变任何东西,因此迁移工具显然非常有效。该应用程序在 3.5 和不带调试器的情况下都能完美地通过 VS2017 运行,但在没有调试器的情况下会引发错误并在 4.0 及更高版本中被调试器卡住。与问题相关的所有代码都在一个项目中。
标签: c# visual-studio debugging upgrade