代码之家  ›  专栏  ›  技术社区  ›  Răzvan Flavius Panda

正在启用SourceLink

  •  0
  • Răzvan Flavius Panda  · 技术社区  · 6 年前

    在VSTS(Azure DevOps)上拥有私有存储库,我尝试通过将以下内容添加到.csproj文件来启用SourceLink: https://github.com/dotnet/sourcelink#azure-devops-visual-studio-team-services

    我在visualstudio中禁用了“只启用我的代码”和SourceLink。

    要启用SourceLink,还需要做哪些其他更改?

    0 回复  |  直到 6 年前
        1
  •  4
  •   MikeBeaton    5 年前

    大多数关于如何设置SourceLink的教程似乎忽略了两个关键点。

    首先:

    • 以及取消选中“只启用我的代码”(非默认),并确保在Options/Debugging/General下选中了“enablesourcelinksupport”(默认),
    • 如果您想使用SourceLink for public packages(例如Newtonsoft.Json)您还必须检查VS Options/Debugging/Symbols中列出的符号服务器。

    • 如果你想把你自己包的符号发布到一个公共源上(例如。nuget.org网站)那就把 .snupkg 格式很好
    • NuGet.Server 包)没有符号服务器, .snupkg公司 (它在NuGet包中包含了.pdb文件,但根据我的测试,消费VS从不使用它们):
      <PropertyGroup>
        <AllowedOutputExtensionsInPackageBuildOutputFolder>$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder>
      </PropertyGroup>
    
      <PropertyGroup>
        <DebugType>Embedded</DebugType>
      </PropertyGroup>
    

    编辑

    结果发现:

    </PropertyGroup>
    

    工作。它生成一个NuGet文件,这是好的,或者应该是。。。但目前 a bug in .NET SDK 这导致它不能以这种方式加载存储在NuGet文件中的.pdb文件,尽管它应该这样做。

    消费

        <PackageReference Include="SourceLink.Copy.PdbFiles" Version="2.8.3" PrivateAssets="All" />
    

    在添加了这些之后,一切都应该按照演示重新工作。

    <Project>
      <Target Name="_ResolveCopyLocalNuGetPackagePdbs" AfterTargets="ResolveReferences"
          Condition="$(CopyLocalLockFileAssemblies) == true">
        <ItemGroup>
          <ReferenceCopyLocalPaths Include="@(ReferenceCopyLocalPaths->'%(RootDir)%(Directory)%(Filename).pdb')" 
              Condition="'%(ReferenceCopyLocalPaths.NuGetPackageId)' != '' and Exists('%(RootDir)%(Directory)%(Filename).pdb')" />
        </ItemGroup>
      </Target>
    </Project>
    

    和(从 here

    把它放在一个好地方目录.Build.targets这样您的项目文件就不会杂乱无章,并且您可以将其应用于解决方案中的多个项目。 https://docs.microsoft.com/en-us/visualstudio/msbuild/customize-your-build

        2
  •  0
  •   MikeBeaton    5 年前

    这可能不是一个直接的答案,但值得注意的是,您不需要SourceLink来获得源代码级别的调试。SourceLink是一种聪明的方法,可以将PDB中的链接放到git repo中的云中源代码。

    另一种获得可移植源代码级调试的方法是将源代码直接嵌入到PDB中( EmbedAllSources=True ),然后在DLL中嵌入PDB( DebugType=embedded bug

    只需将此添加到项目文件中:

      <PropertyGroup>
        <EmbedAllSources>True</EmbedAllSources>
        <DebugType>embedded</DebugType>
      </PropertyGroup>
    

    推荐文章