【问题标题】:Visual Studio Code Breakpoint warning: The source code is different from the original versionVisual Studio 代码断点警告:源代码与原始版本不同
【发布时间】:2017-10-11 16:25:17
【问题描述】:

我是 Visual Studio Code 的新手。我正在尝试调试通过 Git 克隆的已经存在的应用程序。我的文件都没有被修改过。我已经下载了微软扩展“C# for Visual Studio Code(由 OmniSharp 提供支持)”。 应用程序启动并将我带到主页 (http://localhost:5000/)。但是它并没有在我的 startup.cs 断点处停止

当我在运行时查看应用程序而不是红色项目符号点时,它是一个空心灰色断点。将鼠标悬停在它上面告诉我“源代码与原始版本不同。要允许命中此断点:将 "requireExactSource":false 添加到 launch.json 并重新启动调试。”。这个我看不懂。

我正在使用:

  • 视觉代码 1.17.1
  • 外壳 1.7.7
  • 渲染器 58.0.3029.110
  • 节点 7.9.0
  • 架构 x64

我也在使用 dotnet 版本 1.0.3

【问题讨论】:

  • 你能解决这个问题吗?
  • 抱歉@SedatKapanoglu,我没有解决这个问题。

标签: visual-studio-code breakpoints omnisharp


【解决方案1】:

当我将项目从 .NET Core 2.0 升级到 2.1 时,这发生在我身上。问题是我忘记编辑launch.json 将二进制路径从netcoreapp2.0 更改为netcoreapp2.1,所以VS Code 在错误的位置寻找二进制文件。编辑路径解决了这个问题。

编辑:我建议 VS Code 团队采用基于变量的方法来彻底解决此问题,例如在路径中使用 $TargetRuntime 之类的东西,而不是像 netcoreapp2.1 等硬编码的东西。

【讨论】:

  • 就我而言,我将 RuntimeIdentifier 添加到我的 csproj。 VSCode 无法找到正确的二进制文件。感谢您提示正确的方向!
  • 这个答案仍然与从 .NET Core 5.x 升级到 .NET Core 6.0 相关。关于launch.json 的更多细节:要更改的行是"configurations" -> "program"
【解决方案2】:

这可能有几个原因,在我的情况下,这是一个简单/愚蠢的错误,我在我的主文件夹中创建了一个解决方案,然后我添加了一个新文件夹并在其中创建了一个 webapp。我配置了 launch.json 和 task.json 并且在我尝试调试修改之前它运行良好。

我的问题是我忘记将 webapp 项目添加到解决方案中,所以当解决方案尝试构建它时它失败了。

所以我的解决方案是将我的项目添加到解决方案中。

如果不是您的情况,请尝试找出您的项目没有被构建的原因,或者为什么它指向其他目录。

【讨论】:

    【解决方案3】:

    我也是 Visual Studio Code 的新手,我也遇到了同样的问题。幸运的是,我能够解决它。

    首先,当我处于调试模式时,Visual Studio Code 给了我正确的提示,也就是您提到的那个:

    断点警告:源代码与原始版本不同。 要允许命中此断点:将 '"requireExactSource": false' 添加到 launch.json 并重新启动调试。 -

    所以,为了理解,我建议你阅读这个VisualStudioCode-LaunchConfigurations

    正如上面链接中的文档所述:

    launch.json 文件位于工作区(项目根文件夹)或用户设置或工作区设置中的 .vscode 文件夹中。

    因此,如果您编辑该文件并按照调试提示的说明进行操作,那就是:

    将 '"requireExactSource": false' 添加到 launch.json 并重新开始调试。 -

    我的 launch.json 现在看起来像这样:

    configurations": [
        {
            "name": ".NET Core Launch (web)",
            "type": "coreclr",
            "request": "launch",
            "preLaunchTask": "build",
            // If you have changed target frameworks, make sure to update the program path.
            "program": "${workspaceFolder}/DotNetCoreAngularAPp/bin/Debug/netcoreapp2.1/DotNetCoreAngularApp.dll",
            "args": [],
            "cwd": "${workspaceFolder}/DotNetCoreAngularAPp",
            "stopAtEntry": false,
            "requireExactSource": false,
    

    最后一行显示添加的语句。现在,您应该可以调试它了。 我希望这会有所帮助。

    【讨论】:

    • 在这种情况下,调试本身可能毫无用处,因为您可能正在调试一个过时的二进制文件。 OP 应该关注差异背后的根本原因。
    • @SedatKapanoglu 我同意你的观点,但正如原始问题所述: >我的文件都没有被修改。理论上,源代码和二进制文件之间不应该存在差异,因为文件没有被修改。因此,即使根本原因没有解决,他也能够调试这是主要目标。无论如何,正如您所说,应该正视“差异”的根本原因。
    【解决方案4】:

    这是在将 razor Web 应用程序从 .Net Core 3.0 升级到 3.1 时接受的答案的后续:

    1. 将 .csproj 文件 /Project/PropertyGroup/TargetFramework 更改为 netcoreapp3.1
    2. 如前所述:将launch.json配置[0].program更改为 workspaceFolder/bin/Debug/netcoreapp3.1/MyApp.dll
    3. 从 workspaceFolder/bin/Debug/ 中删除 netcoreapp3.0 和 netcoreapp3.1 文件夹
    4. 在终端中:dotnet build
    5. F5 调试和断点被命中

    【讨论】:

      【解决方案5】:

      我遇到了这个问题。删除所有 bin/obj/ 文件夹然后重建并没有解决它。我的 launch.json 二进制路径 program: 是我的确切 DLL。

      修复它的是修改我的 .cs 源文件并重建。 某些内容已过时,可能是 .cs 文件的 vscode 自动保存,或者 dotnet build 在其他地方缓存了某些内容.

      【讨论】:

        【解决方案6】:

        我也面临同样的问题,只需执行这两个步骤即可解决我的问题。 在“构建”菜单中

        1. “清洁解决方案”
        2. “重建解决方案”

        【讨论】:

          【解决方案7】:

          我遇到了同样的问题。检查 .vscode/launch.json 中的配置并确定“preLaunchTask”。然后打开 .vscode/tasks.json 并确保该任务存在并且其在“args”中传递的工作区目标指向您的项目文件。就我而言,我有两个 Web 项目,但只有一个构建任务。

          【讨论】:

          • 这并不能真正回答问题。如果您有其他问题,可以点击 进行提问。要在此问题有新答案时收到通知,您可以follow this question。一旦你有足够的reputation,你也可以add a bounty 来引起对这个问题的更多关注。 - From Review
          猜你喜欢
          • 2011-11-30
          • 1970-01-01
          • 2020-07-30
          • 1970-01-01
          • 2011-04-30
          • 2014-01-06
          • 2011-01-28
          • 1970-01-01
          • 2017-04-11
          相关资源
          最近更新 更多