我已经把我的团队使用到从TeamCity的部署到网络文件夹中的NuGet包库。 我不能调试这个代码! SymbolSource是一个解决方案,我看了一下,但我宁愿找到某种方式来访问该.PDB /源直接从TeamCity的文件。 有谁知道如何做到这一点?
编辑。 当我检查'Include Symbols and Source'
在的NuGet包生成步骤的TeamCity除了在网络文件夹中的.nupkg文件创建一个.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:
可靠的轻量级解决方案
- 把PDB在NuGet包旁边的DLL。
- 添加源代码调试源文件引用包解决方案。
这意味着你就可以遍历代码,查看异常,但你可能必须要找到磁盘上的文件,并打开它之前,你可以设置一个断点。 显然,你需要小心的是,源是在正确的版本。
上步骤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:
你当然可以建立和配置自己的符号服务器 ,但它可能是最简单的...
- 下载并安装Inedo的ProGet
- 使符号服务上的目标进料
- 从发布包的TeamCity的ProGet饲料
- 使用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包的源代码。
- 建立和编译你的本地计算机上的NuGet包
- 复制你刚刚编入当地的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包或安装它的解决方案。
- 运行Visual Studio为管理员
- 打开并启动主机应用程序(在您安装的NuGet包一个),而不调试 (按Ctrl + F5)
- 在NuGet包解决方案,确保
Tools > Options > Debugging > General > "Require source files to exactly match the original version"
未选中。 - 确保
"Enable just my code"
未选中 - 在添加一个新的文件夹
Tools > Options > Debugging > Symbols
指向NuGet包的源目录。 (你从字面上输入文件夹路径,见下图) - 点击
Debug > Attach to Process...
- 查找
iisexpress
(可能有多个,也不会做任何伤害附加到所有)
Answer 8:
如果您对包的源代码,那么万无一失(但可能费力)的方法是:
- 该包的源代码添加到您的解决方案(右键单击解决方案 - >添加现有项目)
- 通过所有项目在溶液去删除的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?