2015-04-15 72 views
1

使用真正簡單的按照指示爲符號服務器的相關源代碼包構建NuGet包,這裏可以在David Ebbo的博客"The easy way to publish NuGet packages with sources"上找到我確實創建了一對包:二進制和源代碼。如何用一個csproj程序集獲得二進制NuGet程序包,但是有兩個csproj源程序的相應源程序包?

但是,源代碼包不完整,原因是源來自兩個類庫.csproj,我使用ILMerge將第二個結果合併到第一個。 (*)因此,使用本文中描述的最小.nuspec並指定nuget.exe.csproj爲「主」庫,二進制包是好的,但是當然源包只有「主」庫的來源,而不是爲ILMerged入「主要」圖書館的圖書館。

我該如何解決這個問題(並且獲取的源代碼包含在符號包中的項目,但僅包含二進制包中「main」項目的二進制文件)?

僅供參考,實際nuget.exe命令行爲:nuget pack CommandLineLexing.csproj -Build -Symbols -Properties Configuration=Release。 (*)如果你有興趣,我這樣做的原因是第二個庫是我累積的「C#工具」庫的一個減少版本 - 你知道,一堆擴展方法和一組擴展方法其他幫手 - 減少,所以它只有這個特定項目所需的最低限度。所以,既然它被削減了,我不希望有單獨的程序集,它可能最終與整個程序集(具有相同的名稱,而不是一個強名稱)混淆。所以我使用ILMerge將實用程序方法放入主程序集(並將其標記爲內部)。

回答

0

不會很容易恐怕。

NuGet symbol packages只是您的常規軟件包,帶有pdbs,增加了源文件。

假設你已經知道你可以通過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到驗證他們的工作。

相關問題