在visual studio 2010中调试源代码时发出警告



我在源代码中设置了断点,但它会警告我源代码与原始代码不同。它不会碰到断点。点击位置以允许更改源代码。有人能解释一下问题出在哪里吗?

源代码文件的校验和与PDB文件中的校验和不匹配。

要解决此问题,请重建解决方案。

解决方法:断点检查的In Location属性Allow source code to be different

编译&运行发布版本。在Release构建中,编译器进行优化,可能会更改或删除部分代码,例如:

static void Main()
{
    int x = 10 + 5;   // <---- BREAKPOINT HERE
    Console.WriteLine("Foo");
}

如果您编译&在调试构建中运行该代码,断点将像往常一样被命中。在发布版本中,编译器将看到"x"从未被使用,并将"优化掉"整行,这意味着断点永远不会被命中!

创建->清洁解决方案,然后创建->构建解决方案。然后再次尝试调试,确保活动配置处于调试状态。

您的源代码与编译时不同。您可以停止、清理和重新生成项目。

当我在一个解决方案中有一个类库,在另一个解决解决方案中又有一个web项目时,我遇到了这个问题。在浏览Web解决方案中的代码时,它进入了我的类库。这导致类库文件在我的web解决方案中被打开。

当我更改类库中的一些代码时,出现了问题。和往常一样,我按照正确的顺序对这两个项目进行了构建。然而,我会收到消息说源代码不同。这是因为我的web解决方案中仍然打开类文件的旧"视图",原因是以下选项已关闭

选项>环境>在环境外更改文件时检测

关闭我的网络项目中的类文件解决了我的问题。我现在正在改变这个选项。

希望这能帮助到别人。

在运行单元测试时,上述建议对我不起作用——我正在为整个解决方案执行清理和重建,但~\UnitTests\bin\Debug目录中的DLL和PDB文件没有被删除,所以我不得不手动删除这些文件,然后右键单击UnitTests目录并选择"构建"

请注意,在我的情况下,我使用的是带有更新3的Visual Studio 2013。

更新:

最终创建了一个批处理文件来清理和构建我的解决方案,这样Visual Studio就不会错误地离开某些项目而不重新构建它们:

msbuild.exe "MyClassLibraryMyClassLibrary.csproj" /t:Rebuild /p:Configuration=Debug
msbuild.exe "UnitTestsUnitTests.csproj" /t:Rebuild /p:Configuration=Debug

最新更新