如何debugging到从TeamCity部署的nuget包?

我已经把我的团队使用的一个库放入了一个从TeamCity部署到networking文件夹的Nuget包中。 我不能debugging到这个代码,但! SymbolSource是我已经阅读的一个解决scheme,但是我更愿意find一些方法直接从Teamcity访问.pdb /源文件。 有谁知道如何做到这一点?

编辑。 当我在Nuget Pack构build步骤中选中'Include Symbols and Source'时,除了networking文件夹中的.nupkg文件外,TeamCity还创build了一个.Symbol.nupkg。 .Symbol.nupkg包含src和.pdb文件。

编辑。 我在TeamCity上取消选中'Include Symbols and Source' ,并将以下内容添加到我的nuspec文件中:

  <files> <file src="..\MyLibrary\bin\release\MyLibrary.dll" target="lib\net40" /> <file src="..\MyLibrary\bin\release\MyLibrary.pdb" target="lib\net40" /> <file src="..\MyLibrary\*.cs" target="src" /> <file src="..\MyLibrary\**\*.cs" target="src" /> </files> 

这添加了我的库的dll,pdb和源文件在nuget包中,并没有生成一个.Symbols文件,我认为这只是符号服务器需要的。

对于更轻量级的解决scheme:

  1. 将pdb放在NuGet软件包旁边。
  2. 将源代码添加到引用包的解决scheme的debugging源文件。

这意味着您将能够遍历代码和查看exception,但是您可能必须先在磁盘上find一个文件并将其打开,然后才能设置断点。 显然你需要小心,来源是在正确的修订。

更详细的步骤1

如果你目前正在打包没有Nuspec,你需要创build一个Nuspec,然后将pdb添加到lib文件夹中的文件列表“NuGet spec”可能是一个有用的命令,用于生成NuGet中定义的初始规范文档 。 然后确保Team City Nuget Pack步骤正在引用新的nuspec。

更详细的步骤2

打开解决scheme时,右键单击解决scheme,select属性…通用属性…debugging源文件,并添加相关二进制引用的根源目录。 或者看MSDN 。 请注意,debugging时无法打开解决scheme属性。

dotPeek(免费!)的最新版本可以作为一个符号服务器,并在飞行中生成pdb文件。 这使我能够debugging通过teamcity提供的dll。

在这里下载:

http://blog.jetbrains.com/dotnet/2014/04/09/introducing-dotpeek-1-2-early-access-program/

说明如何在这里设置它。

https://web.archive.org/web/20160220163146/http://confluence.jetbrains.com/display/NETCOM/dotPeek+Symbol+Server+and+PDB+Generation

你当然可以设置和configuration你自己的符号服务器 ,但它可能是最简单的…

  1. 下载并安装Inedo的ProGet
  2. 在目标Feed上启用符号服务
  3. 从TeamCity发布包到ProGet源
  4. 使用ProGet作为您的主要饲料来源(因为它可以聚合多个饲料,包括nuget.org)

所有这些都可以使用ProGet的免费版本来完成。


免责声明 – 我的日常工作是在Inedo

在你的.nuspec (直接在<package> ):

 <files> <file src="bin\$configuration$\$id$.pdb" target="lib\net451\" /> </files> 

(将net451更改为您正在编译的平台)

由于这个问题最初发布,Jetbrains已经写了一个完整的博客文章,如何做到这一点。 这些步骤可以概括为:

  • 在代理上安装Windowsdebugging工具 。
  • 安装并启用Symbol Server插件 。
  • 将符号文件索引器构buildfunction添加到您的构buildconfiguration。
  • 确保将PDB文件输出为制品。
  • 将Visual Studioconfiguration为使用TeamCity作为源服务器。

如果您正在使用Nuget Package构build步骤,则可以选中“Include Symbols and Source”来输出包含PDB的.symbol.nupkg 。 根据符号文件索引器是否足够聪明来查看这个文件,你可能需要改变文件扩展名以使其工作。

详细信息在这里给出: https : //blog.jetbrains.com/teamcity/2015/02/setting-up-teamcity-as-symbol-and-source-server/

这是我发现的工作,但所有的步骤可能不需要…

注意 :这不允许您同时debugging,只有nuget包或安装它的解决scheme。

  1. 以pipe理员身份运行Visual Studio
  2. 打开并启动主机应用程序(您在其中安装Nuget包的那个) 而不进行debugging (Ctrl + F5)
  3. 在Nuget包解决scheme中,确保不会选中Tools > Options > Debugging > General > "Require source files to exactly match the original version"
  4. 确保"Enable just my code" 被选中
  5. Tools > Options > Debugging > Symbols添加一个指向Nuget包源目录的新文件夹。 (你真的进入文件夹path,见下图)
  6. 单击Debug > Attach to Process...
  7. findiisexpress (可能有多个,它不会造成任何伤害)

符号来源位置的屏幕截图

如果你有包的源代码,那么万无一失(但可能很费力)的方法是:

  1. 将包的源代码添加到您的解决scheme(右键单击解决scheme – >添加现有项目)
  2. 浏览解决scheme中的所有项目,并删除NuGet对库的引用(即打开每个项目下的References文件夹,并删除对该包的引用)。然后,在解决scheme中添加对NuGet包项目的引用。 (即右键单击引用,添加引用,select项目并勾选项目框)

当我想要在NuGet包内debugging的方法被框架调用而不是我的代码的时候,我不得不这样做,所以我不能进入它。 (在我的情况下,该方法是一个ASP.NET DelegatingHandler)。

完成之后,您需要通过源代码pipe理撤消所有更改,以便正确引用NuGet包。

如果您的代码位于公共Git存储库中,或者至less在您的networking中无需身份validation即可访问,那么GitLink将是一个选项:

https://github.com/GitTools/GitLink

GitLink通过更改PDB指向Git服务器使符号服务器过时。 但是,正如之前所说的,这使得Git仓库成为公共的必要 – 直到现在,在访问私有仓库时没有“正确的”方式进行身份validation。