如何调试到从TeamCity的部署我的NuGet包?如何调试到从TeamCity的部署我的NuGet

2019-06-17 10:01发布

我已经把我的团队使用到从TeamCity的部署到网络文件夹中的NuGet包库。 我不能调试这个代码! SymbolSource是一个解决方案,我看了一下,但我宁愿找到某种方式来访问该.PDB /源直接从TeamCity的文件。 有谁知道如何做到这一点?

编辑。 当我检查'Include Symbols and Source'在的NuGet包生成步骤的TeamCity除了在网络文件夹中的.nu​​pkg文件创建一个.Symbol.nupkg。 该.Symbol.nupkg包含src和.pdb文件。

编辑。 我未选中'Include Symbols and Source'上的TeamCity,并添加以下到我的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文件,我认为只需要符号服务器。

Answer 1:

可靠的轻量级解决方案

  1. 把PDB在NuGet包旁边的DLL。
  2. 添加源代码调试源文件引用包解决方案。

这意味着你就可以遍历代码,查看异常,但你可能必须要找到磁盘上的文件,并打开它之前,你可以设置一个断点。 显然,你需要小心的是,源是在正确的版本。

上步骤1更详细地

如果您目前的包装没有Nuspec,你需要创建一个Nuspec,PDB应该添加到lib文件夹中的文件列表“的NuGet规范”可能是产生在定义的初始规范中的一个有用的命令的NuGet文档 。 然后,确保团队市的NuGet包步骤引用您的新nuspec。

上步骤2更详细地

当你打开一个解决方案,右击解决方案,选择属性...通用属性...调试源文件,并添加源根目录中的相关二进制参考。 还是看MSDN 。 请注意,您无法打开,同时调试解决方案的性能。

在未来的 - 嵌入功能

在Visual Studio 2017年15.5 preview2你可以这样这样讲一下你的项目文件:

<PropertyGroup>
    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
    <IncludeSymbolsInPackage>true</IncludeSymbolsInPackage>
    <DebugSymbols>true</DebugSymbols>
    <DebugType>portable</DebugType> <!-- Required for EmbedSources -->
    <EmbedSources>true</EmbedSources>
</PropertyGroup>
<ItemGroup>
    <!-- Does the equivalent of EmbedSources in MSBuild (hopefully won't be needed long term) -->
    <Service Include="{508349b6-6b84-4df5-91f0-309beebad82d}" />
</ItemGroup>

它仍然是这种方法初期,有可能是几个注意事项,以它的使用,看到的底部此评论和相关讨论,以了解更多信息。



Answer 2:

dotPeek(免费!)的最新版本可以作为一个符号服务器和动态生成pdb文件。 这使我调试成通过TeamCity的服务的动态链接库。

在这里下载:

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



Answer 3:

你当然可以建立和配置自己的符号服务器 ,但它可能是最简单的...

  1. 下载并安装Inedo的ProGet
  2. 使符号服务上的目标进料
  3. 从发布包的TeamCity的ProGet饲料
  4. 使用ProGet作为主馈送源(因为它可以聚集多个进料包括nuget.org)

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


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



Answer 4:

.nuspec (直属<package> ):

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

(改变net451你正在编译的平台)



Answer 5:

我发现一个超级简单的方法来做到这一点,这是我的博客上讲述这里:

https://mattfrear.com/2017/11/29/speed-up-development-in-a-nuget-package-centric-solution/

如果您正在使用新的.NET核心.csproj的风格与这只适用<PackageReference>无论是.NET的核心或.NET框架)。

这再次假定您可以访问NuGet包的源代码。

  1. 建立和编译你的本地计算机上的NuGet包
  2. 复制你刚刚编入当地的NuGet包该.dll 饲料的文件夹 (在我的机器,这是C:\Users\matt\.nuget\packages\ ),覆盖现有的NuGet包.dll文件。

而已! 你应该能够步入包边调试。 没有与.pdbs或源服务器瞎搞。 这大大加快了我的开发周期。



Answer 6:

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

  • 安装调试工具的Windows上的代理。
  • 安装并启用符号服务器插件 。
  • 添加符号文件索引构建功能,将您的构建配置。
  • 确保PDB文件是为制造品输出。
  • 配置Visual Studio中使用的TeamCity作为源服务器。

如果您使用的NuGet包生成步骤,你可以选中“包含符号和源以输出.symbol.nupkg其中包含PDBS。 根据是否符号文件索引是足够聪明,看看这个文件中或没有,你可能需要改变的东西的工作文件扩展名。

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



Answer 7:

这是我已经找到了工作,但也有可能不是需要所有的步骤...

注意 :这不会让你同时调试,仅采用了NuGet包或安装它的解决方案。

  1. 运行Visual Studio为管理员
  2. 打开并启动主机应用程序(在您安装的NuGet包一个),而不调试 (按Ctrl + F5)
  3. 在NuGet包解决方案,确保Tools > Options > Debugging > General > "Require source files to exactly match the original version" 选中。
  4. 确保"Enable just my code" 选中
  5. 在添加一个新的文件夹Tools > Options > Debugging > Symbols指向NuGet包的源目录。 (你从字面上输入文件夹路径,见下图)
  6. 点击Debug > Attach to Process...
  7. 查找iisexpress (可能有多个,也不会做任何伤害附加到所有)



Answer 8:

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

  1. 该包的源代码添加到您的解决方案(右键单击解决方案 - >添加现有项目)
  2. 通过所有项目在溶液去删除的NuGet参考库(即每个项目下打开引用文件夹并删除参照包)。然后,在您的解决方案添加到NuGet包项目的引用。 (IE右键单击引用,添加引用,选择项目和蜱项目的框)

我不得不这样做这样,当我我想要的NuGet包内调试方法是由框架而不是我的代码调用,因此,我不能踏进去。 (在我的情况下,该方法是一种ASP.NET DelegatingHandler)。

一旦你完成你要撤消从而使NuGet包被正确引用通过源代码控制的所有更改。



Answer 9:

如果你的代码是在公共Git仓库,或者,至少你的网络中,无需身份验证访问,然后GitLink将是一种选择:

https://github.com/GitTools/GitLink

GitLink使得通过改变PDB指向的Git服务器过时符号服务器。 但是,正如前面所说的,这就需要为Git仓库是公共的 - 到现在为止有没有“正确”的方式访问私人仓库时进行身份验证。



文章来源: How to debug into my nuget package deployed from TeamCity?