gpt4 book ai didi

C# 接口(interface)调试信息未链接到源

转载 作者:行者123 更新时间:2023-11-30 18:02:22 25 4
gpt4 key购买 nike

我正在尝试重新调整一个非常大的解决方案的布局,这个解决方案已经变得难以处理(而且速度很慢)。我的计划是创建多个包含相关项目的解决方案,然后在必要时使用二进制引用链接到其他解决方案生成的库。

我们依靠 Resharper 的导航到外部源功能来实现这一点,因此我们可以轻松浏览我们从其他解决方案引用的项目的源代码。 VS 不能开箱即用的原因超出了我的理解范围。

对于具有实现的类来说,这一切都非常有效。但是,对于仅包含自动实现属性的 C# 接口(interface)和类,Resharper 无法浏览到源,并回退到粗糙的元数据查看器。

我使用了 srctool.exe,它与 Windows 的 MS 调试工具中的符号服务器工具一起提供,浏览 .pdb 文件中列出的源代码,很明显这些接口(interface)和空(ish)类的源代码是pdb 文件中未引用。如果我将自动实现的属性切换为具有支持字段的属性,则源链接会出现在 pdb 中。

我猜源被排除在外是因为没有地方可以在接口(interface)和自动实现的属性上设置断点。

不过,我想知道是否有一些奇特的编译器选项或解决方法我们可以用来强制 PDB 文件包含对 C# 接口(interface)源的引用。

谢谢,标记

最佳答案

问题不够详细。开玩笑,我猜你通过将项目引用转换为程序集引用来解决缓慢的大规模解决方案的问题。并使用这些项目的发布版本作为引用。

是的,这会阻碍任何试图从 PDB 中查找源代码文件的工具。 .NET 项目的发布版本使用 剥离 版本的 PDB,所有源代码文件和行号信息都已从中删除。对于真正的 发布版本来说,这是很正常的事情。发布构建的代码通常是经过优化的。这会导致代码重新排序,不再匹配源文件中代码的逻辑位置。您从源代码+行 PDB 信息中获得的任何信息现在往往介于有害和无用之间,您开始在错误的地方寻找问题。

然而,对于 IDE 工具或调试您的应用程序而言,这不是一个问题。在这种情况下,优化器会自动禁用。其实VS中的一个配置项:Tools + Options,Debugging,General,“Suppress JIT optimization on module load”选项。默认情况下打开。

很明显,任何使用 PDB 的工具在没有机会找到源文件时都会变得紧张。修复方法是返回到原始项目,再次选择 Release 配置并更改设置:Project + Properties,Build 选项卡,向下滚动,Advanced 按钮。将“调试信息”组合从“仅 pdb”更改为“完整”。重建项目。

应该可以解决您的问题。还恢复了调试器,您可以再次进入源代码。

顺便说一句,不要移动太多文件,你可能会再次遇到笨蛋。至少将 PDB 与 DLL 放在同一目录中。如果源代码不再存在于同一个目录中,但您在另一个目录中再次 check out 它,那么您必须将这件事告诉 IDE。右键单击解决方案、属性、调试源文件设置。

关于C# 接口(interface)调试信息未链接到源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8165934/

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