对.net核心项目使用<DebugType> Full </ DebugType>和<DebugType> Portable </ DebugType>有什么区别?

Vir*_*gam 20 .net opencover roslyn .net-core

要生成打开封面报告,我必须将debugType设置为Full.我在构建服务器上生成报告,因为如果覆盖范围没有达到某个阈值,我必须使构建失败.构建在发布模式下生成.在我的csproj文件中保持debugType Full有什么后果?它会降低生产性能吗?

Mar*_*ich 26

不同之处在于"完整"类型会发出经典的Windows PDB符号文件,该文件复杂且记录不完整."便携式"PDB格式是一种新的开源格式,可以在所有平台上创建和使用.您可以在dotnet/core repo上的文档中阅读有关此格式的更多信息.

它与是否可以调试应用程序无关,而是与支持新格式和经典格式的工具无关.因此,没有任何运行时结果(当您使用应用程序发送可移植pdb文件并希望查看行号映射时,在.NET Framework <4.7.1中打印堆栈跟踪除外).

因此,在更新工具以使用新格式之前,如果需要使用尚不支持新格式的工具,则需要将DebugType属性更改Full为"基于SDK"项目的默认格式.

要仅对调试版本执行此操作,您将希望csproj包含类似的部分

<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
  <DebugType>Full</DebugType>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

  • 是的,因为它会在运行时禁用代码的优化 (2认同)

dim*_*aan 6

自 Visual Studio 2013 (Roslyn) 以来,full 和 pdb-only 之间没有区别。我们应该更新文档。@VSadov

https://github.com/dotnet/runtime/issues/25550#issuecomment-374996117

  • [官方文档说明](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/code- Generation):“对于以 C# 6.0 开头的所有编译器版本,有pdbonly 和 full 之间没有区别。” (2认同)
  • @MattOakley 在这句话之前,[相同的文档](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/code- Generation#debugtype) 说“以下信息适用仅适用于 C# 6.0 之前的编译器。” ;) (2认同)