如何获得带有一个csproj程序集的二进制NuGet包,但是有两个csproj源的相应源包?

时间:2015-04-15 01:55:18

标签: nuget nuget-spec

使用非常容易遵循的指令来构建具有符号服务器相关包源的程序集的NuGet包,可以在David Ebbo博客上找到"The easy way to publish NuGet packages with sources"我确实创建了一对包:二进制和源。

然而,源包是不完整的,原因是源来自两个类库.csproj,我使用ILMerge将第二个结果合并到第一个。 (*)因此,使用此帖中描述的最小.nuspec并将nuget.exe指向.csproj,用于" main"库,二进制包很好,但当然源包只有'#34; main"图书馆,也不是ILMerged到" main"库。

如何修复此问题(并获取符号包中包含的两个项目的来源,但只获取二进制包中&#34; main&#34;项目的二进制文件)?< / p>

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

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

1 个答案:

答案 0 :(得分:0)

恐怕不容易。

NuGet symbol packages只是你的普通包,带有pdbs,增加了源文件。

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

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

虽然如果你运行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来验证他们的工作。