我已将我的团队使用的库放入从TeamCity部署到网络文件夹的nuget包中。我虽然无法调试这段代码! SymbolSource是我读过的一个解决方案,但我更愿意找到一些方法直接从Teamcity访问.pdb /源文件。有谁知道如何做到这一点?
编辑。当我在Nuget Pack构建步骤中检查'Include Symbols and Source'
时,除了网络文件夹中的.nupkg文件外,TeamCity还会创建.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>
这在nuget包中添加了我的库的dll,pdb和源文件,并且没有生成.Symbols文件,我认为只有符号服务器才需要。
答案 0 :(得分:68)
这意味着您将能够单步执行代码并查看异常,但您可能必须在磁盘上找到一个文件并在设置断点之前将其打开。显然,您需要注意源是正确的修订版。
有关第1步的更多详情
如果你目前正在打包没有Nuspec,你需要创建一个Nuspec,然后将pdb添加到lib文件夹中的文件列表“NuGet spec”可能是一个有用的命令,用于生成初始规范在NuGet docs中定义。然后确保Team City Nuget Pack步骤引用您的新nuspec。
有关第2步的详细信息
打开解决方案后,右键单击Solution,选择Properties ... Common Properties ... Debug Source Files,然后添加相关二进制引用的根源目录。或者查看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>
这种方法还处于早期阶段,可能会有一些注意事项,请参阅this comment的底部和相关讨论以了解更多信息。
答案 1 :(得分:29)
最新版本的dotPeek(免费!)可以充当符号服务器并动态生成pdb文件。这使我可以调试通过teamcity提供的dll。
在此处下载:
http://blog.jetbrains.com/dotnet/2014/04/09/introducing-dotpeek-1-2-early-access-program/
有关如何在此处进行设置的说明。
答案 2 :(得分:8)
你当然可以set-up & configure your own symbol server,但它可能最容易......
答案 3 :(得分:6)
在.nuspec
(直接在<package>
下):
<files>
<file src="bin\$configuration$\$id$.pdb" target="lib\net451\" />
</files>
(将net451
更改为您正在编译的平台
答案 4 :(得分:3)
我找到了一种超级简单的方法,我在这里写了博客:
https://mattfrear.com/2017/11/29/speed-up-development-in-a-nuget-package-centric-solution/
这仅适用于您使用新的.NET Core样式.csproj和<PackageReference>
(在.NET Core或.NET Framework上)。
这再次假设您可以访问NuGet包的源代码。
C:\Users\matt\.nuget\packages\
),覆盖现有的NuGet包.dll。 就是这样!您应该能够在调试时进入包中。不要乱用.pdbs或源服务器。这大大加快了我的开发周期。
答案 5 :(得分:2)
由于这个问题最初发布,Jetbrains写了一篇关于如何实现这一目标的完整博客文章。这些步骤可以概括为:
如果您正在使用Nuget Package构建步骤,则可以选中“包含符号和来源”#39;输出包含PDB的.symbol.nupkg
。根据符号文件索引器是否足够智能以查看此文件,您可能需要更改文件扩展名才能使用。
详情如下: https://blog.jetbrains.com/teamcity/2015/02/setting-up-teamcity-as-symbol-and-source-server/
答案 6 :(得分:2)
如果你有包的源代码,那么万无一失(但可能很费力)的方法是:
当我想在NuGet包中调试的方法被框架而不是我的代码调用时,我必须这样做,因此我无法进入它。 (在我的例子中,该方法是一个ASP.NET DelegatingHandler)。
完成后,您将希望通过源代码管理撤消所有更改,以便正确引用NuGet包。
答案 7 :(得分:2)
这是我发现的工作,但可能不需要所有步骤......
注意:这不允许你调试两者,只有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
(可能有多个,不会对所有人造成任何伤害)答案 8 :(得分:0)
如果您的代码位于公共Git存储库中,或者至少在您的网络中,无需身份验证即可访问,那么GitLink将是一个选项:
https://github.com/GitTools/GitLink
GitLink通过将PDB更改为指向Git服务器来使符号服务器过时。但是,如前所述,这使得Git存储库必须公开 - 直到现在还没有&#34;正确的&#34;访问私有存储库时进行身份验证的方法。
答案 9 :(得分:0)
Microsoft现在在https://github.com/dotnet/sourcelink/处集成了SourceLink NuGet软件包,如果NuGet软件包的发布者对其进行了设置,则可以在调试时按需下载源代码。