Jér*_*VEL 8 debug-symbols visual-studio nuget-package sourcelink azure-devops
互联网上有几种关于如何使用符号源文件和Source Link在Nuget包中进行调试的记录方法,但说实话,很难理解什么对我来说是好方法。
我们有一个Azure DevOps服务器,在其上生成Nuget程序包,同时.pdb使用Index Sources & Publish Symbols构建管道中的任务将文件发布到Azure DevOps Symbol Server ,如下所述
我的项目中也有Microsoft.SourceLink.Vsts.Git对此.csproj文件的引用和此代码
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<EmbedUntrackedSources>true</EmbedUntrackedSources>
Run Code Online (Sandbox Code Playgroud)
我看过几篇博客文章,但是我最信任的最新资源当然是官方的Source Link Git仓库。
该readme.md文件说
通常不建议在.nupkg中包含PDB,因为这会增加包的大小,从而为使用您的包的项目恢复时间,无论用户是否需要通过库的源代码进行调试
我同意这一点,这就是为什么我要使用Symbol Server而不.pdb在Nuget软件包中包含文件的原因。因此,请不要将我的问题标记为与此问题重复,因为接受的答案正是我不想做的。
自述文件还指出:
.snupkg符号包有一些限制:
- 它们当前不支持Windows PDB(由VC ++生成,或者对于将构建属性DebugType设置为full的托管项目)
- 他们要求该库由较新的C#/ VB编译器构建(Visual Studio 2017 Update 9)。
- 程序包的使用者还需要Visual Studio 2017 Update 9调试器。
- Azure DevOps Artifacts服务不支持。
所以至少我知道我不能使用它。
但是,设置并运行Source Link的正确方法是什么?
当我调试测试控制台应用程序时,它成功将.pdb文件下载到我的Symbols缓存文件夹中,但是如果我尝试使用进入来自我的Nuget包的代码F11,那将是行不通的。(但是System.String.Concat由于我的简单测试Nuget Package实际上是连接一些字符串,所以它介入了)
我试着跑步sourcelink test TestSourceLink.pdb但得到了error: url hash does not match。我在这里读到这sourcelink test是一件很古老的事情,不支持对像我们这样的私有存储库的身份验证。
使用浏览器,如果我访问给出的URL,则sourcelink print-json TestSourceLink.pdb可以看到最新的源代码。但是现在的问题是,为什么Visual Studio无法下载源代码?我已在VS中通过此Azure DevOps服务器进行身份验证,因为我能够安装来自该服务器的Nuget程序包。
这是我的调试设置:
非常感谢。我真的不知道这个难题的缺失部分是什么
好吧,在发布我的问题之前,我应该已经阅读并遵循了这个答案,因为这是难题的缺失部分。
我需要遵循Eric博客文章中的第 5步和第6步,但是实际上我不需要修改pack命令,因为我没有.pdb在Nuget软件包中包含该文件。
注意:到目前为止,只有在使用“ 调试构建配置”生成Nuget软件包的情况下,我才能使此工作正常。如果您找到让Nulink包中的Release DLL使用Source Link的方法,请回答我的其他问题。谢谢
这需要两件事:
.pdb)的符号文件,该文件是调试器使用的映射文件对于解决方案中的每个项目:
仅当您计划Nuget包的使用者使用Visual Studio 2017时。如果要在Visual Studio 2019中使用Source Link,则不需要此步骤:
在Visual Studio中,右键单击您的项目-> Properties然后转到Build -> Advanced并将其Debugging Information从Portable(默认值)更改为Full
安装Microsoft.SourceLink.Vsts.Git Nuget程序包(您必须选中Include prereleaseVisual Studio中的复选框)
编辑.csproj文件,并在第一个PropertyGroup元素中包含以下代码:
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<EmbedUntrackedSources>true</EmbedUntrackedSources>
Run Code Online (Sandbox Code Playgroud)
创建一个名为的管道变量BuildConfiguration(如果尚不存在),并将其值设置为Debug
.NET Core Build任务中使用此变量作为参数:--configuration $(BuildConfiguration).NET Core Pack任务中,在Configuration to Package字段中使用此变量:$(BuildConfiguration)在管道的最后,您必须有一个任务 Index Sources & Publish Symbols
Artifact name字段中,也BuildConfiguration必须使用变量:Symbols_$(BuildConfiguration)当然,您还必须执行一项.NET Core Push任务,将Nuget程序包推送到Azure DevOps Nuget Feed
Tools -> Options -> Debugging -> Symbols单击该New Azure DevOps Symbol Server Location...按钮并验证服务器
C:\Symbols\。这是所有.pdb文件存储的地方Tools -> Options -> Debugging -> Symbols点击Load only specified modules。您可以在此处指定要加载的DLL的符号文件。
如果不执行此操作,而将默认值保留为Load all modules, unless excluded,则在调试模式下运行程序时,Visual Studio将花费很长时间加载所有内容。
提示:在调试时,要查看项目加载的所有DLL,请单击Debug -> Windows -> Modules。在这里,您可以查看完整列表,选择多个列表,然后右键单击Copy Value -> Copy Name
Tools -> Options -> Debugging -> General
Enable Just My CodeEnable source server supportEnable Source Link Support当您想在Nuget软件包的代码中进行调试时,自然按下F11即可进入其中,Visual Studio会询问您是否同意从Azure DevOps存储库中下载源代码
| 归档时间: |
|
| 查看次数: |
1251 次 |
| 最近记录: |