将 pdb 文件包含到我的 nuget (nupkg) 文件中

2024-01-26

我正在使用 MSBuild 生成我的 nuget 包。

我是否需要设置任何命令,以允许它包含我的.pdb文件,以便在调试时进入源代码?

我不希望将源文件包含到拉入 nuget 包的项目中。


生产

最简单的配置方法是有一个Directory.Build.props具有类似这样的通用参数......

<Project>
  <PropertyGroup>
    <!-- Based on https://devblogs.microsoft.com/dotnet/producing-packages-with-source-link/ -->
    <!-- Publish the repository URL in the built .nupkg (in the NuSpec <Repository> element) -->
    <PublishRepositoryUrl>true</PublishRepositoryUrl>

    <!-- Embed source files that are not tracked by the source control manager in the PDB -->
    <EmbedUntrackedSources>true</EmbedUntrackedSources>

    <!-- Embed symbols containing Source Link in the main file (exe/dll) -->
    <DebugType>embedded</DebugType>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
    <GenerateDocumentationFile>true</GenerateDocumentationFile>
  </PropertyGroup>

  <PropertyGroup Condition="'$(TF_BUILD)' == 'true'">
    <ContinuousIntegrationBuild>true</ContinuousIntegrationBuild>
  </PropertyGroup>
<Project>

在生成包的每个项目中,您可以引用适当的SourceLink为您的系统组装。

解释如下:

  • 持续集成构建:使你的 CI 系统产生 文件的规范路径,只能为 CI 服务器设置为 否则你将无法找到本地源 DebugType
  • 生成文档文件:生成 XML 文档文件以包含在 dll 中 - 您确实编写了文档,不是吗 ;-)
  • Embedded:将pdb数据添加到汇编文件中,简化 以增加 dll 大小为代价进行分发

更多信息请参见这里微软博客文章 https://devblogs.microsoft.com/dotnet/producing-packages-with-source-link/

消费

NET 7

将符号文件复制到执行目录现在已合并到NET 7.0 SDK/VS2022 17.4+ https://github.com/dotnet/sdk/issues/22362作为一种选择加入的方法。将以下片段添加到您的项目文件中...

<PropertyGroup>
  ...
  <CopyDebugSymbolFilesFromPackages>true</CopyDebugSymbolFilesFromPackages>
  <CopyDocumentationFilesFromPackages>true</CopyDocumentationFilesFromPackages>
</PropertyGroup>

这会将所有符号和文档文件复制到您的输出目录中;如果您只想要一个子集,例如your文件,您将必须在此基础上实现过滤机制

Earlier

如果您使用的是 VS2017 15.4 或更高版本,您可以在项目文件中定义 MSBuild 属性

<AllowedOutputExtensionsInPackageBuildOutputFolder>$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder>

这在中讨论NuGet #4142 https://github.com/NuGet/Home/issues/4142#issuecomment-341867400

但是,仍然存在一个问题,因为新项目系统不会将 pdb 从包复制到 bin/publish 文件夹中.NET核心3.0+ https://github.com/dotnet/sdk/issues/1458,一个很好的总结也位于来源链接/#628 https://github.com/dotnet/sourcelink/issues/628

由于该修复仅在 .NET 7 SDK+ 中受支持,因此您需要一种解决方法,即将以下片段包含到 API 和测试项目中,以确保您拥有适当的 pdb 以允许您单步执行远程源代码。

<!-- https://github.com/dotnet/sdk/issues/1458#issuecomment-1063915490 -->
<Target Name="IncludeSymbolFiles" AfterTargets="ResolveAssemblyReferences" Condition="@(ReferenceCopyLocalPaths) != ''">
  <ItemGroup>
    <ReferenceCopyLocalPaths Include="%(ReferenceCopyLocalPaths.RelativeDir)%(ReferenceCopyLocalPaths.Filename).pdb;                                %(ReferenceCopyLocalPaths.RelativeDir)%(ReferenceCopyLocalPaths.Filename).xml" />
    <ReferenceCopyLocalPaths Remove="@(ReferenceCopyLocalPaths)" Condition="!Exists('%(FullPath)')" />
  </ItemGroup>
</Target>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 pdb 文件包含到我的 nuget (nupkg) 文件中 的相关文章

  • Visual Studios 2015 中的“恢复 NuGet 包”没有执行任何操作

    我将解决方案从 SVN 拉入 Visual Studios 2015 代码中的一些 使用 引用出现错误 因此我尝试在右键单击 解决方案 中的解决方案时运行 恢复 NuGet 包 选项探索者 这没有任何作用 我必须手动进入 nuget 管理器
  • getline 之后返回到文件开头

    所以我已经从文件中读取了所有行 while getline ifile line logic 其中 ifile 是 ifstream line 是字符串 我的问题是我现在想再次使用 getline 并且似乎无法返回到文件的开头 因为运行 c
  • 更新 Azure Blob 上的 LastModified

    我正在移植代码以使用 C 中的 Azure 存储 SDK 传统上 我称其为更新修改文件的上次写入 修改时间 File SetLastWriteTimeUtc fileName lastWriteTimeUtc 要更新 blob 的上次修改时
  • 信号与信号2

    我的应用程序可能会受益于使用 boost 的信号库之一而不是本土解决方案 该应用程序是多线程的 但执行信号处理的部分是单线程的 如果多线程不是问题 是否有任何理由更喜欢 Boost Signals2 而不是 Boost Signal Boo
  • 预编译头和 Visual Studio

    有没有办法设置 Visual Studio 解决方案参数 以便它只创建预编译头而不构建整个解决方案 具体来说 它是一个巨大的 C 解决方案 本身有许多项目 谢谢 仅选择 pch 创建者源文件 通常是 stdafx cpp 然后编译该文件 C
  • 如何从不同的线程访问控件?

    如何从创建控件的线程以外的线程访问控件 避免跨线程错误 这是我的示例代码 private void Form1 Load object sender EventArgs e Thread t new Thread foo t Start p
  • 为什么像 BindingList 或 ObservableCollection 这样的类不是线程安全的?

    我一次又一次发现自己必须编写 BindingList 和 ObservableCollection 的线程安全版本 因为当绑定到 UI 时 这些控件无法从多个线程更改 我想理解的是why情况就是这样 这是设计错误还是故意的 问题是设计一个线
  • 如何使用 CUDA/Thrust 对两个数组/向量根据其中一个数组中的值进行排序

    这是一个关于编程的概念问题 总而言之 我有两个数组 向量 我需要对一个数组 向量进行排序 并将更改传播到另一个数组 向量中 这样 如果我对 arrayOne 进行排序 则对于排序中的每个交换 arrayTwo 也会发生同样的情况 现在 我知
  • 为什么 BinaryFormatter 可以序列化 Action<> 但 Json.net 不能

    尝试序列化 反序列化 Action 尝试我的 1天真 JsonConvert SerializeObject myAction JsonConvert Deserialize
  • std::make_pair 与浮点数组(float2,无符号整数)

    我有一个用 float2 unsigned int 对模板化的向量 例如 std vector
  • 模板与非模板类,跨编译器的不同行为

    我在一些应用程序中使用编译时计数器 它确实很有用 昨天我想用 gcc 编译一个程序 我之前使用的是 msvc 并且计数器的行为在模板类中发生了变化 它在模板类中不再工作 过于简化的代码 Maximum value the counter c
  • 如何在 C++ 运行时更改 QML 对象的属性?

    我想在运行时更改 QML 对象的文本 我尝试如下 但文本仍然为空 这是后端类 class BackEnd public QObject Q OBJECT Q PROPERTY QString userFieldText READ userF
  • 查找方法不适用于 EF6.1 模拟

    我已经使用这些 msdn 指南设置了模拟 使用模拟框架进行测试 EF6 及以上 http msdn microsoft com en us data dn314429 var bsAc db BusAcnts FirstOrDefault
  • 从 C# 调用时无法识别 Powershell 命令

    这是这个的延续Question https stackoverflow com questions 66280000 powershell object returns null 66280138 noredirect 1 comment1
  • 如何禁用基于 ValidationRule 类的按钮?

    如何禁用基于 ValidationRule 类的 WPF 按钮 下面的代码可以很好地突出显示 TextBox
  • 从具有相同属性的另一个对象创建对象

    我有一个 C 对象 可以说有 20 个属性 它是数据契约的一部分 我还有另一个具有类似属性的业务实体 我想从响应对象中填充该实体 除了将一个对象的每个属性分配给另一个对象的相应属性之外 还有其他方法可以做到这一点吗 是的 看看自动映射器 h
  • 为什么代码分析不警告 NotImplementedException?

    我非常确定 Visual Studio Code Analysis 的早期版本会警告有关 NotImplementedException 的使用 即包含此异常的任何成员 throw new NotImplementedException 会
  • 使用C标准数学库精确计算标准正态分布的CDF

    标准 C 数学库不提供计算标准正态分布 CDF 的函数 normcdf 然而 它确实提供了密切相关的函数 误差函数 erf 和互补误差函数 erfc 计算 CDF 的最快方法通常是通过误差函数 使用预定义常量 M SQRT1 2 来表示 d
  • 在 C# 中使用自定义千位分隔符

    在显示字符串时 我尝试不使用 字符作为千位分隔符 而是使用空格 我想我需要定义一种自定义文化 但我似乎做得不对 有什么指点吗 例如 将 1000000 显示为 1 000 000 而不是 1 000 000 no String Replac
  • 在 LP2844Z(Zebra 打印机)上的收据中包含 PNG [重复]

    这个问题在这里已经有答案了 我正在致力于创建一个基于 HTML5 画布的签名 绘图框 目前我们在服务器上将画布保存为PNG 但可以轻松地将base64字符串保存在数据库中 现在的问题是我们如何在打印的收据上添加签名 目前我们使用 GF 字段

随机推荐

  • 寻求一种更好的方法从查找表中添加 data.table 中的列

    我想创建一个新专栏key在我的 data table 中 通过公共列与查找表合并index1 index2 然后从这个新的值key柱子 a b c 我想生成 3 个新列 a b c 索引valuedata table 中的列 我的 data
  • Angular 2 HTTP 超时

    我在发布有关 HTTP 超时的自定义错误消息时遇到问题 这是一个简单的例子 return this http get url timeout 5000 new Error Error message 我看到大家都用新错误 错误消息 但我收到
  • WebView中的支付流程(Android)

    我有一个支付网关的网址 我需要在其中输入信用卡号等 我可以使用 WebView 打开此页面并直接在我的应用程序中付款吗 不打开像 Chrome 这样的单独的网络客户端 谷歌对于用户直接在 WebView 中输入信用卡 借记卡信息的应用程序发
  • 在控制台应用程序内以静默方式使用 ADFS 进行身份验证

    我有一个引用 ADAL net 库的 C 控制台应用程序 Microsoft IdentityModel Clients ActiveDirectory 版本 2 19 208020213 控制台应用程序的目的是使用受 ADFS 保护的 H
  • 如何使用 Tkinter 设置网格的位置?

    甚至可以在 Tkinter 中设置网格的绝对位置吗 我正在尝试创建一个如下所示的 GUI 但我可能采用了错误的方式 那么如果可以的话 网格位置如何设置呢 目标图形用户界面 到目前为止 我的 GUI 的结果是这样的 如您所见 我的新联系人需要
  • 对每组的一定比例进行采样,但具有最小约束(使用 dplyr)

    我有 6 个类别 阶层 的总体 我想在每个阶层中取 10 作为样本 这样做我采取 var c rep A 10 rep B 10 rep C 3 rep D 5 E F var value rnorm 30 dat tibble var v
  • 如何使用角度日期管道从数字中获取月份名称

    我想使用 Angular 的日期管道显示包含 本地化 月份名称的下拉列表
  • boost::multi precision::uint128_t sizeof 是 24

    基础数学 128 8 16 的说法不同 我有点失望 想要一些答案 因为从我习惯的情况来看 该符号 type num of bytes t 不仅描述了您可以放入变量的数据量 但是也跨平台固定可变大小 恕我直言 后者更为重要 我究竟做错了什么
  • 在 Node JS 集群之间划分快速路由

    我在 Node JS 应用程序中有大量路由 我正在尝试扩展到多个 CPU 核心 通过 NodeJS 集群 我的计划是让不同的工作人员处理一组不同的express js 路线 例如 api requests handled by Worker
  • 使用Python从gmail发送电子邮件

    我正在尝试通过构建对我有用的程序 脚本来自学如何编程 我正在尝试重新编写我在网上找到的脚本 以使用 python 脚本通过 gmail 发送电子邮件 Source http kutuma blogspot com 2007 08 sendi
  • 错误 TS2304:找不到名称“ImageCapture”且已安装 @types/w3c-image-capture

    我正在使用 Ionic 4 和 Angular 7 开发 PWA 我需要访问网络摄像头 如果存在 然后在画布中渲染 在这个过程中我使用图像捕捉 https developer mozilla org en US docs Web API I
  • 设置驱动器卷标签

    我正在开发一个小型实用程序 我想在其中更改连接到计算机的闪存驱动器上的卷标 我知道 DriveInfo 能够做到这一点 但我不知道如何实现它 如果有人有代码示例 我将非常感激 这是我目前拥有的 DriveInfo allDrives Dri
  • 如何在 ListView 构建器中创建与 flutter 中旁边的标签一致的按钮列表?

    我需要制作这个应用程序 在 flutter 中使用 ListView 显示历史人物列表 到目前为止我已经能够列出历史人物的名字了 我的下一个任务是为名称旁边的每个历史人物制作一个按钮 这会将您带到另一个屏幕 其中包含有关该特定历史人物的信息
  • Python中的成对叉积[重复]

    这个问题在这里已经有答案了 如何获取交叉产品列表pairs来自Python中任意长列表的列表 Example a 1 2 3 b 4 5 6 crossproduct a b 应该产生 1 4 1 5 1 6 您正在寻找itertools
  • Flutter readAsBytesSync 文件读取不完整以进行 base64 编码

    项目清单 我正在尝试通过 HTTP POST 使用 base64 编码将 JPG 图像 由模拟器中的 ImagePicker 捕获 发送到 AWS REST API 但是 readAsBytesSync 操作仅读取图像的 头 部分 我已经测
  • C# String.IsNullOrEmpty:好还是坏?

    在工作中发生一次我将 String IsNullOrEmpty 与 Session 变量一起滥用的事件之后 我的一位同事现在拒绝接受我对 String IsNullOrEmpty 的使用 经过一番研究 显然 MSDN 上列出了 IsNull
  • 用于检查 zip 文件是否损坏的 Python 脚本

    如何检查 zip 文件是否损坏 我有一个包含 10 张 jpg 图像的 zip 文件 我能够提取其中 8 张图像 zip 中的两个图像已损坏 我无法提取它们 有没有办法在 Python 脚本中检查这一点 此代码将抛出异常 如果 zip 文件
  • 如何获取准确的浏览器名称和版本?

    我尝试了一些解决方案 但无法获得确切的名称和版本 我正在尝试以下代码 browserAgent SERVER HTTP USER AGENT echo browserAgent 上述代码的输出 Mozilla 5 0 X11 Linux i
  • Handsontable:如何更改渲染函数中的单元格值

    我有类似的代码
  • 将 pdb 文件包含到我的 nuget (nupkg) 文件中

    我正在使用 MSBuild 生成我的 nuget 包 我是否需要设置任何命令 以允许它包含我的 pdb文件 以便在调试时进入源代码 我不希望将源文件包含到拉入 nuget 包的项目中 生产 最简单的配置方法是有一个Directory Bui