Chr*_*ris 5 c# symbols symbol-server nuget
我有一个构建服务器,用于构建内部 Nuget 包。当我使用该包并尝试进入一种方法时,它不起作用。
所有符号都发布到我的符号服务器,我已经在我的 VS 设置中启用了它。
如果我检查“模块”窗口,我会看到 Nuget DLL 在那里,并且为它和从符号服务器加载了正确的符号。
但是,当我尝试单步执行代码时,它会直接跳过该方法。如果我使用调用堆栈专门查看该行代码,它会显示“找不到 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。
调试器找不到源文件“C:\Build Agent\vsts-agent-win7-x64-2.117.1_work\1\s\ClientsShared\Class\ClientBase.cs”。
为什么要在 Build Agent 上寻找源代码?这不应该存储在符号服务器上的 PDB 中吗?
可能发生的情况是您添加到 NuGet 包中的 PDB 文件不是索引文件。它是由 MSBuild 构建的原始文件。
\n\n您在使用 TeamCity 吗?您只有一种构建配置吗?如果是这样的话,那么情况肯定是这样的。
\n\nTeamCity 索引作为工件创建的任何 PDB 文件(假设您已安装该插件)。这里有一个要点:为 PDB 建立索引意味着修改PDB。修改后的 PDB 将在构建工件中找到。由于在构建过程中修改后的(索引的)PDB 不可用,因此您必须将其拆分为两个配置。
\n\n创建名为“构建”的构建配置并编辑配置设置。查看常规设置。工件路径列出了将从您的构建中输出的文件。
\n\n此文本框列出了一系列规则:将与此模式匹配的文件复制到该路径上的工件。您想要添加规则以使用正确的相对结构将 dll、pdb、sln、csproj、nuspec 和 packages.config 文件复制到工件。你最终应该得到这样的结果:
\n\nMyProject.sln\nMyProject/bin/Release/MyProject.pdb => MyProject/bin/Release\nMyProject/bin/Release/MyProject.dll => MyProject/bin/Release\nMyProject/MyProject.csproj => MyProject\nMyProject/MyProject.nuspec => MyProject\nMyProject/packages.config => MyProject\nRun Code Online (Sandbox Code Playgroud)\n\n运行此构建并验证您是否获得了预期的工件。检查构建日志并确保它包含步骤 \xe2\x80\x9cIndexing symbolsources\xe2\x80\x9d 和 \xe2\x80\x9cPublishingsymbolsources\xe2\x80\x9d。然后单击成功构建的 Artifacts 选项卡,这六个文件应该会列出,并且位于正确的目录结构中。
\n\n由于 TeamCity 在索引 PDB 时会对其进行修改,因此您无法在构建配置中生成 NuGet 包。您需要第二个配置。我们将其命名为 \xe2\x80\x9cNuGet\xe2\x80\x9d。
\n\n创建一个名为 NuGet 的新构建配置并编辑配置设置。查看依赖项,然后添加新的工件依赖项。这应该取决于构建配置并从上次成功构建中获取工件。引入我们从构建配置输出的所有文件:
\n\n**/*\nRun Code Online (Sandbox Code Playgroud)\n\n创建一个名为“NuGet Install”的构建步骤。这应该是一个“NuGet 安装”步骤,用于恢复所有依赖项。输入 *.sln 文件的名称。
\n\n创建名为“NuGet Pack”的第二个构建步骤。这应该是 \xe2\x80\x9cNuGet Pack\xe2\x80\x9d 步骤。规范文件实际上是您的 csproj,而不是您的 nuspec!只需提供完整路径,例如 MyProject/MyProject.csproj。将输出目录设置为 \xe2\x80\x9cPackages\xe2\x80\x9d 并选中 \xe2\x80\x9cPublish 创建的包以构建工件\xe2\x80\x9d。
\n\n要完成此图,您需要确保 *.nuspec 文件包含 PDB 文件。您可以通过将 DLL 和 PDB 作为 *.nuspec 中的文件列出来完成此操作。在下面添加一个部分(不在其中)并列出这两个文件。它应该看起来像这样:
\n\n<?xml version="1.0"?>\n<package >\n <metadata>\n <id>$id$</id>\n <version>$version$</version>\n <title>$title$</title>\n <authors>$author$</authors>\n <owners>$author$</owners>\n <requireLicenseAcceptance>false</requireLicenseAcceptance>\n <description>$description$</description>\n <copyright>Copyright 2018</copyright>\n </metadata>\n <files>\n <file src="bin\\Release\\MyProject.dll" target="lib\\net461" />\n <file src="bin\\Release\\MyProject.pdb" target="lib\\net461" />\n </files>\n</package>\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
451 次 |
| 最近记录: |