使用 Azure Devops 和源调试 NuGet 包 Link
Debug NuGet package with Azure Devops and Source Link
我正在尝试让 SourceLink 与私有 NuGet 包一起工作。
我是 运行 一个 netcore2.1 Web 应用程序,它引用托管在我们的 Azure Devops NuGet 源上的 netstandard2.0 NuGet 包。
问题 1:Source Link 是否支持 .NET Standard 包?
我已经按照此处https://docs.microsoft.com/en-us/azure/devops/artifacts/symbols/setting-up-github-sourcelinking?view=vsts中的指南进行操作,基本上是:
将索引源和发布符号包添加到我的 Azure Devops 构建中。
在Visual Studio中,将我们的VSTS服务器添加为符号服务器
在 Visual Studio 中,启用源 Link 支持。我还尝试启用源服务器支持。
构建管道发布符号路径似乎有效 - 在日志中我看到:
Succeeded processing D:\a\s\src\MyCompany.Core.Services.SnapshotClient\bin\release\netstandard2.0\MyCompany.Core.Services.SnapshotClient.pdb:
当我开始调试我的应用程序时,我在 VS 输出中看到一堆输出 window:
'dotnet.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App.1.4\Microsoft.AspNetCore.Hosting.dll'. Cannot find or open the PDB file.
对于我的 NuGet 包,我看到 "Symbols loaded" 这看起来很有希望。
FWIW 我没有看到 Visual Studio 的提示 "Source Link will download from the internet"。
当我调试并尝试进入我的 NuGet 包时,它只是跳过它。
然后我尝试了:
前往 https://github.com/dotnet/sourcelink 并按照他们的说明安装了 Microsoft.SourceLink.Vsts.Git 软件包(问题 2 是否有必要?)
当这不起作用时,我升级了应用程序中的每个该死的包,这迫使我安装 .NET Core SDK 2.1.403
在拖网 GitHub 问题后,尝试向我的 NuGet 包的 .csproj 添加一些内容
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<AllowedOutputExtensionsInPackageBuildOutputFolder>$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder>
和
<DebugType>portable</DebugType>
<ci>true</ci>
现在我的 .nupkg 也包含 .pdb 文件,这些文件以前不存在。尽管如此,仍然无法帮助我进行调试。
在我的 .nupkg 的 .pdb 上安装了 https://www.nuget.org/packages/sourcelink/ 和 运行 sourcelink print-urls
的 sourcelink cli 工具。我认为看起来正确吗?存在 URL。
在看到来自@mitchdenny 的评论 https://github.com/MicrosoftDocs/vsts-docs/issues/1336#issuecomment-414415049 后禁用索引。还是不行。
现在我很困惑为什么它不起作用。
Question 1: Does Source Link support .NET Standard packages?
是的。我在 Azure DevOps Pipeline 上成功构建了一个 .NET Standard 2.0 库,之后它被推送到我们私有的 Azure DevOps Artifacts NuGet 源。然后,在本地项目中,我能够进入库(Visual Studio 提示我弹出有关下载远程源代码的窗口)。
以下是我必须在图书馆的 .csproj
文件中进行的更改:
<PropertyGroup>
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<EmbedUntrackedSources>true</EmbedUntrackedSources>
<AllowedOutputExtensionsInPackageBuildOutputFolder>
$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb
</AllowedOutputExtensionsInPackageBuildOutputFolder>
</PropertyGroup>
...
<ItemGroup>
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0-beta-63127-02" PrivateAssets="All"/>
</ItemGroup>
Question 2: is that [PackageReference to Microsoft.SourceLink.GitHub] necessary?
我不确定。 docs 表明它是。但我删除了引用,在 Azure DevOps 上重新构建,并且仍然能够单步执行库。可能对于不同的环境是必要的(我保留它以防万一)。
FWIW:
- 我正在使用 Visual Studio 15.8.9
进行调试
- 我最新安装的 .NET Core SDK 是 2.1.403
- 我的库的使用者是 .NET Core 2.1 可执行文件
- 我使用 Cake 编译了我的库,我调用了
dotnet msbuild
我写了一篇关于如何使用 .NET Core 和 AzureDevops 执行此操作的完整 blog,但这些步骤也适用于 .NET Standard 项目。
也就是说,您应该了解的 Microsoft 文档中缺少的一些关键要点是:
- 项目的调试信息需要从"Portable"更改为"Full"
- AzureDevOps Nuget(restore, build, pack & push) 需要使用.NET Core 任务。
- .NET Core 构建任务应该有一个传入值 "debug" 的参数“--configuration”。这样做会生成 .PDB 文件
- .NET Core 包任务应使用 "custom" 命令,自定义命令为 "pack" 并具有以下参数:“--include-symbols -v d”和“- c" 传入值 "debug"。这样做会告诉 pack 命令将 .PDB 文件包含在包中。
我正在尝试让 SourceLink 与私有 NuGet 包一起工作。 我是 运行 一个 netcore2.1 Web 应用程序,它引用托管在我们的 Azure Devops NuGet 源上的 netstandard2.0 NuGet 包。
问题 1:Source Link 是否支持 .NET Standard 包?
我已经按照此处https://docs.microsoft.com/en-us/azure/devops/artifacts/symbols/setting-up-github-sourcelinking?view=vsts中的指南进行操作,基本上是:
将索引源和发布符号包添加到我的 Azure Devops 构建中。
在Visual Studio中,将我们的VSTS服务器添加为符号服务器
在 Visual Studio 中,启用源 Link 支持。我还尝试启用源服务器支持。
构建管道发布符号路径似乎有效 - 在日志中我看到:
Succeeded processing D:\a\s\src\MyCompany.Core.Services.SnapshotClient\bin\release\netstandard2.0\MyCompany.Core.Services.SnapshotClient.pdb:
当我开始调试我的应用程序时,我在 VS 输出中看到一堆输出 window:
'dotnet.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App.1.4\Microsoft.AspNetCore.Hosting.dll'. Cannot find or open the PDB file.
对于我的 NuGet 包,我看到 "Symbols loaded" 这看起来很有希望。
FWIW 我没有看到 Visual Studio 的提示 "Source Link will download from the internet"。
当我调试并尝试进入我的 NuGet 包时,它只是跳过它。
然后我尝试了:
前往 https://github.com/dotnet/sourcelink 并按照他们的说明安装了 Microsoft.SourceLink.Vsts.Git 软件包(问题 2 是否有必要?)
当这不起作用时,我升级了应用程序中的每个该死的包,这迫使我安装 .NET Core SDK 2.1.403
在拖网 GitHub 问题后,尝试向我的 NuGet 包的 .csproj 添加一些内容
<PublishRepositoryUrl>true</PublishRepositoryUrl> <AllowedOutputExtensionsInPackageBuildOutputFolder>$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder>
和<DebugType>portable</DebugType> <ci>true</ci>
现在我的 .nupkg 也包含 .pdb 文件,这些文件以前不存在。尽管如此,仍然无法帮助我进行调试。在我的 .nupkg 的 .pdb 上安装了 https://www.nuget.org/packages/sourcelink/ 和 运行
sourcelink print-urls
的 sourcelink cli 工具。我认为看起来正确吗?存在 URL。在看到来自@mitchdenny 的评论 https://github.com/MicrosoftDocs/vsts-docs/issues/1336#issuecomment-414415049 后禁用索引。还是不行。
现在我很困惑为什么它不起作用。
Question 1: Does Source Link support .NET Standard packages?
是的。我在 Azure DevOps Pipeline 上成功构建了一个 .NET Standard 2.0 库,之后它被推送到我们私有的 Azure DevOps Artifacts NuGet 源。然后,在本地项目中,我能够进入库(Visual Studio 提示我弹出有关下载远程源代码的窗口)。
以下是我必须在图书馆的 .csproj
文件中进行的更改:
<PropertyGroup>
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<EmbedUntrackedSources>true</EmbedUntrackedSources>
<AllowedOutputExtensionsInPackageBuildOutputFolder>
$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb
</AllowedOutputExtensionsInPackageBuildOutputFolder>
</PropertyGroup>
...
<ItemGroup>
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0-beta-63127-02" PrivateAssets="All"/>
</ItemGroup>
Question 2: is that [PackageReference to Microsoft.SourceLink.GitHub] necessary?
我不确定。 docs 表明它是。但我删除了引用,在 Azure DevOps 上重新构建,并且仍然能够单步执行库。可能对于不同的环境是必要的(我保留它以防万一)。
FWIW:
- 我正在使用 Visual Studio 15.8.9 进行调试
- 我最新安装的 .NET Core SDK 是 2.1.403
- 我的库的使用者是 .NET Core 2.1 可执行文件
- 我使用 Cake 编译了我的库,我调用了
dotnet msbuild
我写了一篇关于如何使用 .NET Core 和 AzureDevops 执行此操作的完整 blog,但这些步骤也适用于 .NET Standard 项目。
也就是说,您应该了解的 Microsoft 文档中缺少的一些关键要点是:
- 项目的调试信息需要从"Portable"更改为"Full"
- AzureDevOps Nuget(restore, build, pack & push) 需要使用.NET Core 任务。
- .NET Core 构建任务应该有一个传入值 "debug" 的参数“--configuration”。这样做会生成 .PDB 文件
- .NET Core 包任务应使用 "custom" 命令,自定义命令为 "pack" 并具有以下参数:“--include-symbols -v d”和“- c" 传入值 "debug"。这样做会告诉 pack 命令将 .PDB 文件包含在包中。