如何调试从 TeamCity 部署的 nuget 包?

2023-12-22

我已将我的团队使用的库放入 nuget 包中,该包从 TeamCity 部署到网络文件夹中。但我无法调试这段代码! SymbolSource 是我读过的一种解决方案,但我更愿意找到某种方法来直接从 TeamCity 访问 .pdb/源文件。有谁知道如何做到这一点?

Edit.当我检查时'Include Symbols and Source'在 Nuget Pack 构建步骤中,除了网络文件夹中的 .nupkg 文件之外,TeamCity 还会创建一个 .Symbol.nupkg。 .Symbol.nupkg 包含 src 和 .pdb 文件。

Edit.我未选中'Include Symbols and Source'在 TeamCity 上并将以下内容添加到我的 nuspec 文件中:

  <files>
    <file src="..\MyLibrary\bin\release\MyLibrary.dll" target="lib\net40" />
    <file src="..\MyLibrary\bin\release\MyLibrary.pdb" target="lib\net40" />
    <file src="..\MyLibrary\*.cs" target="src" />
    <file src="..\MyLibrary\**\*.cs" target="src" />
  </files>

这在 nuget 包中添加了 dll、pdb 和我的库的源文件,并且没有生成 .Symbols 文件,我认为该文件仅适用于符号服务器。


传统方法

  1. 将 pdb 与 dll 一起放入 NuGet 包中。
  2. 将源代码添加到引用该包的解决方案的调试源文件中。

这意味着您将能够单步执行代码并查看异常,但您可能必须在磁盘上找到一个文件并将其打开,然后才能设置断点。显然,您需要注意源代码的版本是否正确。

步骤的更多细节

如果您当前在没有 Nuspec 的情况下进行打包,则需要创建一个 Nuspec,然后将 pdb 添加到 lib 文件夹中的文件列表中,“NuGet spec”可能是生成初始规范的有用命令,如NuGet 文档 http://docs.nuget.org/docs/reference/nuspec-reference。然后确保 Team City Nuget Pack 步骤引用您的新 nuspec。

有关步骤 2 的更多详细信息

打开解决方案后,右键单击“解决方案”,选择“属性”...“通用属性”...“调试源文件”,然后添加相关二进制引用的根源目录。或者看MSDN http://msdn.microsoft.com/en-us/library/ms241613.aspx#BKMK_Find_source_files。 请注意,调试时无法打开解决方案属性。

仍然没有达到断点?

Try disabling this from Tools->Options: Disable exact source match


公共或私人回购的现代方式

为了确保源代码的确切版本可用,请在构建时嵌入它。

从 Visual Studio 2017 15.5+ 开始,您可以添加 EmbedAllSources 属性:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <EmbedAllSources>true</EmbedAllSources>

公共回购的现代方式

为了保持你的 nuget 和库的大小较小,你可以使用源码链接包 https://github.com/ctaggart/SourceLink#embedding-source-files.

它生成一个 pdb,将调试器定向到来自 VCS 提供商(例如 GitHub、BitBucket)的正确版本的文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何调试从 TeamCity 部署的 nuget 包? 的相关文章

  • 将运算符 << 添加到 std::vector

    我想添加operator lt lt to std vector
  • 为什么这个 Web api 控制器不并发?

    我有一个 Web API 控制器 里面有以下方法 public string Tester Thread Sleep 2000 return OK 当我调用它 10 次 使用 Fiddler 时 我预计所有 10 次调用都会在大约 2 秒后
  • Exit() 时是否调用基本对象析构函数?

    我意识到这个问题已经出现过几次 但我试图获得上述问题的明确答案 但我不断遇到相互矛盾的信息 我需要知道的是 当我使用 exit 时 基本类对象是否被破坏 我知道需要删除动态内存 但我的意思更像是 include
  • Environment.CurrentDirectory 与 System.IO.Directory.GetCurrentDirectory

    我正在编写一个 Net WinForms 并不断在调试和发布配置之间切换 并且有一些文件我需要任一配置才能访问 我想做的是将文件放在 BIN 文件夹中的公共目录中 这样它看起来像这样 MyProject Bin CommonFiles My
  • 如何在类文件中使用 Url.Action() ?

    如何在 MVC 项目的类文件中使用 Url Action Like namespace 3harf public class myFunction public static void CheckUserAdminPanelPermissi
  • 按扩展名过滤搜索文件返回太多结果

    我正在开发一个 C 控制台应用程序 它必须管理 Windows 操作系统上的文件 我需要获取具有特定扩展名的文件名 列表 我找到了很多解决方案 最建议的是以下一种 HANDLE hFind WIN32 FIND DATA data hFin
  • 有些有助于理解“产量”

    在我不断追求少吸的过程中 我试图理解 产量 的说法 但我不断遇到同样的错误 someMethod 的主体不能是迭代器块 因为 System Collections Generic List 不是迭代器接口类型 这是我被卡住的代码 forea
  • 语音识别编程问题入门

    所以 你们可能都看过 钢铁侠 其中托尼与一个名为贾维斯的人工智能系统进行交互 演示剪辑here http www youtube com watch v Go8zsh1Ev6Y 抱歉 这是广告 我非常熟悉 C C 和 Visual Basi
  • 如何使用 Regex.Replace 从字符串中删除数字?

    我需要使用Regex Replace从字符串中删除所有数字和符号 输入示例 123 abcd33输出示例 abcd 请尝试以下操作 var output Regex Replace input d string Empty The d标识符
  • 获取没有显式特征的整数模板参数的有符号/无符号变体

    我希望定义一个模板类 其模板参数始终是整数类型 该类将包含两个成员 其中之一是类型T 另一个作为类型的无符号变体T 即如果T int then T Unsigned unsigned int 我的第一直觉是这样做 template
  • 更新除一个之外的所有包

    有没有办法更新除一个之外的所有软件包 例如 当我创建新项目时 我需要更新除 jQuery 之外的所有包 它应该保持相同的版本 您可以编写一个自定义脚本来更新包 如下所示 并在包管理器控制台中执行它 list Get package proj
  • 在 C# 中为父窗体中的子窗体控件添加事件处理程序

    我有两种形式 一种是带有按钮和文本框的父表单 单击该按钮时 将打开一个对话框 该子窗体又包含一个文本框和一个按钮 现在我想要的是 每当子表单文本框中的文本更改时 父表单文本框中的文本会自动更改 为了获得这个 我所做的是 Form3 f3 n
  • memcpy/memmove 到联合成员,这是否设置“活动”成员?

    重要说明 一些评论者似乎认为我是从工会抄袭的 仔细看memcpy 它从普通旧地址复制uint32 t 它不包含在联合中 另外 我正在复制 通过memcpy 到工会的特定成员 u a16 or u x in a union 不直接到整个联盟本
  • C++ - 多维数组

    处理多维数组时 是否可以为数组分配两种不同的变量类型 例如你有数组int example i j 有可能吗i and j是两种完全不同的变量类型 例如 int 和 string 听起来您正在寻找 std vector
  • WPF DataGrid / ListView 绑定到数组 mvvm

    我们假设你有 N 个整数的数组 表示行数的整数值 在模型中 该整数绑定到视图中的 ComboBox Q1 如何将数组 或数组的各个项目 绑定到 DataGrid 或 ListView 控件 以便 当您更改 ComboBox 值时 只有那么多
  • 代码中的.net Access Forms身份验证“超时”值

    我正在向我的应用程序添加注销过期警报 并希望从我的代码访问我的 web config 表单身份验证 超时 值 我有什么办法可以做到这一点吗 我认为您可以从 FormsAuthentication 静态类方法中读取它 这比直接读取 web c
  • 了解 Lambda 表达式和委托 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经尝试解决这个问题很长一段时间了 阅读在线博客和文章 但到目前为止还没有成功 什么是代表 什么是 Lambda 表达式 两者的优点
  • 我可以使用 lambda 函数或 std::function 对象来代替函数指针吗?

    我有一个需要使用的库 它定义了以下内容 typedef void CallbackFunction const int i 并且有一个注册回调的函数 如下所示 void registerCallback CallbackFunction p
  • 当用户更改 Windows 中的语言键盘布局时如何通知?

    I want to show a message to user when the user changes the language keyboard layout of Windows for example from EN to FR
  • 如何在 C 中将 char 连接到 char* ?

    我怎样才能前置char c to char myChar 我有c值为 A and myChar值为 LL 我怎样才能前置c to myChar使 ALL 这应该有效 include

随机推荐