ProGet符号和源服务器:正确下载pdb,但找不到源

时间:2019-05-28 09:14:31

标签: visual-studio teamcity symbols pdb proget

我在使用ProGet和VS2017 / VS2019保护源文件和符号时遇到问题。

我的情况如下

  1. 在我的PC上开发测试程序集
  2. 将mod文件推送到我们的git服务器上
  3. 在TeamCity(2019.1)中获取mod文件
  4. 在“发布”模式下构建源,在ProGet(5.2.3)上打包并发布AssemblyTest.symbols.nupkg
  5. 在VS2017中,我创建了一个测试控制台应用程序,通过“程序包参考”安装了AssemblyTest,并且尝试在代码中的类上按F12键以显示源代码或以调试方式进入程序。

我已按照指南的建议配置{2017 {3}}

使用-symbols命令行参数启动nuget pack命令,并使用以下结构创建symbol.nupkg

  • 包装
    • 服务
    • 元数据
      • ...
  • lib
    • net472
      • TestAssembly.dll
      • TestAssembly.pdb
      • TestAssembly.xml
  • src
    • 属性
      • AssemblyInfo.cs
    • TestClass.cs

在我的代码中的TestClass上按F12键,pdb已正确下载到

c:\ users \ me \ appdata \ local \ temp \ symbolcache \ testassembly.pdb \ bf5be5cd155e4400b9b18c0e1e6a05941 \ testassembly.pdb

然后在我看到的Visual Studio输出窗口的下拉列表中选择ReSharper项目

PdbNavigator: Downloader: http://srv.symbolsource.org/pdb/Public/testassembly.pdb/bf5be5cd155e4400b9b18c0e1e6a05941/testassembly.pdb -> The remote server returned an error: (500) Internal Server Error. 
--OK, it's MS symbol server

PdbNavigator: Downloader: http://myproget/symbols/dev/testassembly.pdb/bf5be5cd155e4400b9b18c0e1e6a05941/testassembly.pdb -> ok, 15.5 KB
-- OK, it's our ProGet server

PdbNavigator: Searching for 'TestAssembly.TestClass' type sources in C:\Users\me\AppData\Local\Temp\SymbolCache\TestAssembly.pdb\bf5be5cd155e4400b9b18c0e1e6a05941\TestAssembly.pdb

PdbNavigator: Downloader: http://myproget/source-files/dev/TestAssembly/1.0.0.10/TestClass.cs -> The remote server returned an error: (404) Not Found.
-- Here we come :(

PdbNavigator: No sources found in debugging information for 'TestAssembly.TestClass' in assembly 'TestAssembly, Version=1.0.0.10, Culture=neutral, PublicKeyToken=null'

在我的symbolcache文件夹中,有一个带有此路径的子文件夹

C:\ Users \ me \ AppData \ Local \ Temp \ SymbolCache \ src \ source-files \ dev \ TestAssembly \ 1.0.0.10

但是没有源文件。

看看pdb文件内部,我发现了

SRCSRV: ini ------------------------------------------------
VERSION=2
INDEXVERSION=2
VERCTRL=http
SRCSRV: variables ------------------------------------------
SRCSRVVERCTRL=http
PGSERVER=http://myproget/source-files
PGFEED=dev
PGPKGID=TestAssembly
PGPKGVER=1.0.0.10
HTTP_EXTRACT_TARGET=%pgserver%/%pgfeed%/%pgpkgid%/%pgpkgver%/%var2%
SRCSRVTRG=%http_extract_target%
SRCSRVCMD=
SRCSRV: source files ---------------------------------------
c:\buildagent\work\b5cfc05c815c43d9\testassembly\testclass.cs*TestClass.cs
SRCSRV: end ------------------------------------------------

所以,我的问题是:如何从ProGet正确下载源文件? 我的情况怎么了?

谢谢!

Fabrizio

1 个答案:

答案 0 :(得分:0)

从ProGet的角度来看,在以下任何一种情况下,/source-files/*端点将返回404:

  • 找不到供稿名称(例如您的示例中的dev
  • 提要不是NuGet提要
  • 未为供稿启用符号服务器
  • /source-files URL中缺少软件包版本
  • 软件包版本不是有效的NuGet版本(1.0.0.10看起来不错)
  • 在包的/src文件夹下找不到文件本身(即您的示例中的TestClass.cs)

话虽这么说,您是否可以使用此软件包1.0.0.10版的“文件”标签在供稿本身中验证这些源文件是否存在?我知道,如果将普通的非符号程序包推到一个符号之后,它可以覆盖它,从而有效地删除那些文件。