Azure DevOps NuGet Feed 消费者步入源代码

Posted

技术标签:

【中文标题】Azure DevOps NuGet Feed 消费者步入源代码【英文标题】:Azure DevOps NuGet Feed consumer step into source code 【发布时间】:2019-03-19 19:46:08 【问题描述】:

我正在开发 Azure DevOps 管道,我在其中发布了 NuGet 源。提要有 abc.dll 和 abc.pdb 文件。我的提要的消费者能够将 abc.dll 和 abc.pdb 放入他们的 bin 文件夹中。他们还能够调用 abc.dll 中的方法。

我的问题是如何将源代码包含到 PDB 文件中。我希望我的提要的消费者在调试时单步执行代码。目前,当他们这样做时,他们会收到一条消息,指出找不到源代码文件。

我知道让其他人知道您的代码会带来安全风险,但我们只是想尝试看看它是如何工作的。我不希望消费者做任何事情。只需获取我的提要、调用方法并单步执行代码即可。

更新

我能够解决以下问题。我在我的包中添加了我的源代码文件,消费者能够将它们获取到他们的本地机器并能够单步执行代码。

Is it possible to host both regular and symbols packages in a NuGet local feed on a network share?

但我担心我有很多源代码文件,这会导致我的提要的大小增加,而且我不希望我的源代码文件被下载到消费者本地机器上。

我能够在 Azure DevOps 管道中使用 Index Sources & Publish Symbols task 发布符号,但是当他们尝试调试和步骤时,我收到错误消息说我的源代码文件在消费者端找不到成代码。我在下面尝试过,但不起作用。

https://docs.microsoft.com/en-us/azure/devops/artifacts/symbols/debug-with-symbols-visual-studio?view=azure-devops

我们如何真正调试由索引源和发布符号任务产生的代码?

解决方案

我可以按照以下链接中的确切步骤解决问题

https://marcduerst.com/2018/01/11/how-to-build-and-publish-nuget-packages-with-source-symbols-to-vsts/

https://docs.microsoft.com/en-us/azure/devops/artifacts/symbols/debug-with-symbols-visual-studio?view=azure-devops

【问题讨论】:

如何打包 NuGet 包? 我创建了一个 Azure DevOps 构建管道,其中包含构建、复制文件、NuGet Pack 和 NuGet 推送任务。在 NuGet Push 中,我为目标提要属性命名我的提要... 【参考方案1】:

Azure DevOps NuGet Feed 消费者步入源代码

那个文档主要是介绍任务Index Sources & Publish Symbols task,关于如何调试包。此任务用于将符号发布到 Azure Artifacts 中的符号服务器,以便我们可以使用索引符号来调试我们的应用程序。

如果我们想进入源代码,就像你说的,我们需要包含源代码。但是我们不能将源代码包含在到 PDB 文件中,因为那只是 Azure Artifacts 中的一个符号服务器,我们不能包含源代码。即使我们可以将源代码包含到 PDB 文件中,我们仍然无法单步执行源代码,因为 Visual Studio/MSBuild 无法知道应该使用哪个源代码。

符号服务器使调试器能够自动检索 正确的符号文件,但不知道产品名称、内部版本号或包名称的源代码。

因此,要解决此问题,我们必须在 nuget 包中包含源代码,而不是 PDB 文件。然后我们可以在 Visual Studio 中指定源代码。

查看我在another thread的回答中的详细步骤:

将 pdb 和源代码文件放在 NuGet 包中的旁边 dll。 将源代码添加到解决方案的调试源文件中 引用包。

希望这会有所帮助。

【讨论】:

我尝试了在 NuGet Feed 中包含源代码文件的方法,它解决了问题。但我想尝试其他不包含源代码文件的方式。我的索引源和发布符号任务成功,但消费者遇到问题并且无法进入代码。它说找不到源代码文件。您如何调试作为索引源和发布符号任务的结果的 pdb 文件。 @Ziggler,没有源代码我们无法进入代码。 pdb 包含调试信息,类似于可执行代码和源代码之间的映射。使用 pdb VS 调试器知道每条指令在源文件中的位置,但它仍然需要有源文件来向您显示代码。检查此线程:***.com/questions/43597750/…。该任务用于将pdb文件发布到服务器,以便我们可以在VS中使用它,但我们仍然需要源代码。 @Ziggler,同样,如果我们可以在没有源代码的情况下进入源代码,这将是非常不安全的。很容易得到别人的源代码。如果你不希望你的源代码文件被下载到消费者本地机器,你可以尝试设置一个网络共享文件夹来保存这些源文件。 我正在执行此博客和各种博客中的步骤。marcduerst.com/2018/01/11/… 但无法调试和进入代码...

以上是关于Azure DevOps NuGet Feed 消费者步入源代码的主要内容,如果未能解决你的问题,请参考以下文章

Azure Devops 找不到恢复的 nuget 包

将 Nuget 包从本地 TFS2017 发布到 azure DevOps

Azure Devops 私有构建代理在 nuget 还原任务中失败

Azure DevOps 项目管道无法从不同项目中的工件源访问 NuGet 包

带有 NuGet 上游源的 Azure DevOps Artifacts 源的安装包失败

如何在 Azure Devops 中使用 msbuild 创建具有发布和调试配置的 nuget 文件