繁体   English   中英

调试Nuget包时找不到符号源代码

[英]Cannot find Symbol Source code when debugging Nuget package

我有一个构建服务器,构建一个内部Nuget包。 当我使用该包并尝试进入一个方法时,它不起作用。

所有符号都发布到我的符号服务器,我在VS设置中启用了这个符号。

如果我检查模块窗口,我看到Nuget DLL在那里,并为它和符号服务器加载了正确的符号。

但是,当我尝试进入代码时,它会跳过该方法。 如果我使用调用堆栈专门查看该行代码,则会显示“ClientBase.cs not found”。 如果我扩展“源搜索信息”,我会看到:

找到'C:\\ Build Agent \\ vsts-agent-win7-x64-2.117.1_work \\ 1 \\ s \\ ClientsShared \\ Class \\ ClientBase.cs'的源代码。 (没有校验和。)

文件'C:\\ Build Agent \\ vsts-agent-win7-x64-2.117.1_work \\ 1 \\ s \\ ClientsShared \\ Class \\ ClientBase.cs'不存在。

查看'C:\\ Build Agent \\ vsts-agent-win7-x64-2.117.1_work \\ 1 \\ s \\ ClientsShared \\ Class \\ ClientBase.cs'的脚本文档...

查看'C:\\ Build Agent \\ vsts-agent-win7-x64-2.117.1_work \\ 1 \\ s \\ ClientsShared \\ Class \\ ClientBase.cs'的项目。

在项目中找不到该文件。

使用源服务器寻找源代码...

活动解决方案的调试源文件设置表明调试器不会要求用户查找文件:C:\\ Build Agent \\ vsts-agent-win7-x64-2.117.1_work \\ 1 \\ s \\ ClientsShared \\ Class \\ ClientBase的.cs。

调试器找不到源文件'C:\\ Build Agent \\ vsts-agent-win7-x64-2.117.1_work \\ 1 \\ s \\ ClientsShared \\ Class \\ ClientBase.cs'。

为什么要在Build Agent上寻找源代码? 这不应存储在符号服务器上的PDB中吗?

可能发生的是您添加到NuGet包中的PDB文件不是索引文件。 它是由MSBuild构建的原始文件。

你在使用TeamCity吗? 你只有一个构建配置吗? 如果是这样,那肯定是这样的。

TeamCity索引任何创建为Artifacts的PDB文件(假设您已安装插件 )。 这是一个问题:索引PDB意味着修改您的PDB。 修改后的PDB将在构建工件中找到。 由于在构建期间没有任何意义,修改(索引)的PDB将可用,您必须将其拆分为两个配置。

构建配置

创建名为Build的构建配置并编辑配置设置。 查看常规设置。 工件路径列出将从您的构建输出的文件。

此文本框列出了一系列规则:将与模式匹配的文件复制到路径中的工件。 您希望添加规则以使用正确的相对结构将dll,pdb,sln,csproj,nuspec和packages.config文件复制到工件。 你应该得到这样的东西:

MyProject.sln
MyProject/bin/Release/MyProject.pdb => MyProject/bin/Release
MyProject/bin/Release/MyProject.dll => MyProject/bin/Release
MyProject/MyProject.csproj => MyProject
MyProject/MyProject.nuspec => MyProject
MyProject/packages.config => MyProject

运行此构建并验证您是否获得了预期的工件。 检查构建日志并确保它包含“索引符号源”和“发布符号源”步骤。 然后单击成功构建的Artifacts选项卡,应列出这六个文件,并使用正确的目录结构。

NuGet配置

由于TeamCity在对其进行索引时修改了PDB,因此无法在Build配置中生成NuGet包。 您需要第二次配置。 这个我们称之为“NuGet”。

创建名为NuGet的新构建配置并编辑配置设置。 查看依赖项,并添加一个新的工件依赖项。 这应该取决于Build配置并从上次成功构建中获取工件。 引入我们从Build配置输出的所有文件:

**/*

创建一个名为“NuGet Install”的构建步骤。 这应该是一个“NuGet Install”步骤来恢复所有依赖项。 输入* .sln文件的名称。

创建第二个名为“NuGet Pack”的构建步骤。 这应该是“NuGet Pack”步骤。 规范文件实际上是你的csproj,而不是你的nuspec! 只需提供完整路径,例如MyProject / MyProject.csproj。 将输出目录设置为“Packages”并选中“发布创建的包以构建工件”。

NuGet规范

要完成图片,您需要确保* .nuspec文件包含PDB文件。 您可以通过将DLL和PDB列为* .nuspec中的文件来完成此操作。 在下面添加一个部分(不在其中)并列出这两个文件。 它应该看起来像这样:

<?xml version="1.0"?>
<package >
  <metadata>
    <id>$id$</id>
    <version>$version$</version>
    <title>$title$</title>
    <authors>$author$</authors>
    <owners>$author$</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>$description$</description>
    <copyright>Copyright 2018</copyright>
  </metadata>
  <files>
    <file src="bin\Release\MyProject.dll" target="lib\net461" />
    <file src="bin\Release\MyProject.pdb" target="lib\net461" />
  </files>
</package>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM