1

使用非常容易遵循的说明为带有符号服务器的关联源包的程序集构建 NuGet 包,可在 David Ebbo 的博客“发布带有源的 NuGet 包的简单方法”中找到,我确实创建了一对包:二进制和源。

但是,源包不完整,原因是源来自两个类库.csproj,我使用 ILMerge 将第二个的结果合并到第一个中。(*) 因此,使用本文中描述的最小值.nuspec并指向nuget.exe.csproj主”库,二进制包很好,但当然源包只有“主”库的源,而不是库的源被ILMerged到“主”库中。

我该如何解决这个问题(并获取符号包中包含的两个项目的源代码,但只有二进制包中“主”项目的二进制文件)?

仅供参考,实际的nuget.exe命令行是:nuget pack CommandLineLexing.csproj -Build -Symbols -Properties Configuration=Release.

(*) 如果您有兴趣,我这样做的原因是,第二个库是我积累的“C# 实用程序”库的精简版本 - 你知道,一堆扩展方法和其他帮助程序 - 切下来,所以它只有这个特定项目所需的最低限度。因此,由于它已被削减,我不希望它有单独的程序集,这可能最终与完整程序集混淆(具有相同的名称,而不是强名称)。所以我使用 ILMerge 将实用程序方法放入主程序集中(并将它们标记为内部)。

4

1 回答 1

0

恐怕不容易。

NuGet符号包只是您的常规包,带有 pdb,并增加了源文件。

假设您已经知道可以使用 ILMerge/ILRepack (/debug) 获得合并的 PDB,该部分可能是工作文件,我假设您的问题是仅包含当前项目的源文件。

您可以简单地对您的 symbol.nupkg(它是一个 zip)进行后处理,并将来自其他(合并)项目的源文件包含在 src 文件夹中(您甚至可以手动尝试)。

虽然如果你运行srctool.exe -r MyMergedAssembly.pdb,你会看到不同的根路径,通常(对于非合并项目)它们都有一个共同的前缀。

如果 SymbolSource 可以处理 PDB 中的多个路径前缀,它可能会起作用,我还没有尝试过。

我也没有找到任何关于他们处理符号包的文档。我们可以假设他们使用pdbstr.exe工具来更新 PDB 文件的 PDB srcsrv 部分以将符号加载重定向到他们的网站,但只能通过测试来判断他们是否支持多个根。

如果您将增强符号包上传到 symbolsource,您可以使用类似于http://srv.symbolsource.org/pdb/Public/Castle.Core.pdb/4C81FC30DF584853B9869EAB2FA7D9891/Castle.Core.pd_的 URL 下载更新的 PDB (然后将其解压缩为 pdb 文件)

然后你可以同时使用srctool.exe file.pdbpdbstr.exe -r -s:srcsrv -p:file.pdb来验证他们的工作。

于 2015-05-04T23:24:46.437 回答