2011-09-20 77 views
38

創建NuGet包比方說,我有一個項目,這種結構:有多個DLL

MyLibrary\ 
    MyLibrary.sln 
    MyLibrary.Core\ 
    MyLibrary.Core.csproj 
    MyLibrary.Extensions\ 
    MyLibrary.Extensions.csproj 
    MyLibrary.Tests\ 
    MyLibrary.Tests.csproj 

我想創建一個單一的NuGet包的軟件包MyLibrary.Core.dll和MyLibrary.Extensions.dll。我似乎無法弄清楚如何讓NuGet做到這一點。我已經嘗試手動構建一個spec文件,並且我已經嘗試使用「nuget spec MyLibrary.Core.csproj」構建一個。我已經嘗試將所有的DLL添加到一個lib /文件夾,我知道這是基於約定的機制,將DLL添加到包中。在任何情況下,我都可以讓MyLibary.Core.dll進入軟件包,但MyLibrary.Extensions.dll最終並未隨之打包。

TLDR:創建包含多個項目/程序集的NuGet包的最佳做法是什麼?有沒有關於此的教程?我發現的教程都專注於簡單的單項目演示。

回答

2

您是否嘗試過NuGet Package Explorer?可能是最簡單的方法:

http://nuget.codeplex.com/releases/view/59864

+0

+1 - 在嘗試了更多的「手動」方法後,該工具終於使我能夠製作一個完整的可用包,因此我也推薦它。 – Dib

18

你有沒有產生一個空白nuspec文件:

nuget spec 

如果您使用的文件,然後把你的dll的文件夾中下它名爲lib,它將它們打包。

我試圖從項目或DLL生成nuspec文件有點麻煩。 另外,如果您手動引用nuspec文件中的任何文件,則不會使用這些約定。這可能是從dll或項目生成的nuspecs的問題。

另外,如果你想從不同的文件夾執行構建腳本運行此,你可以告訴通過-BasePath命令行的NuGet您的\ lib文件夾的位置:

build\nuget.exe pack nuget\Company.Project.nuspec -BasePath nuget\ 
+0

謝謝。我認爲BasePath交換機可以讓我得到我所追求的。 – RationalGeek

+0

這對我有用。 – mhvelplund

35

。您將在單個項目(或nuspec文件)上運行NuGet,但它支持通過file element指向其他項目的指針。該元素使用項目名稱參考文獻,因此您可以避免必須a)找到其他項目文件的位置,以及b)將文件作爲後期構建步驟複製到特定位置。

假如你有MyLibrary.Core.csproj一個nuspec文件,它引用MyLibrary.ExtensionsMyLibrary.Tests,使得他們最終在bin目錄構建後:

<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> 
    <metadata> 
    ... 
    </metadata> 
    <files> 
    <file src="bin\Release\MyLibrary.Extensions.dll" target="lib\net40" /> 
    <file src="bin\Release\MyLibrary.Tests.dll" target="lib\net40" /> 
    </files> 
</package> 

使用此設置,您的所有參考應最終在NuGet包中的適當位置。你仍然有硬編碼的'釋放',但我打賭很可能不會分發他們的調試版本的NuGet包。

+11

您不必對「發佈」進行硬編碼,您可以將其替換爲「$ configuration $」。你可以這樣做的原因是因爲MSBuild參數在構建nupkg時可用。除非你不使用MSBuild來製作軟件包.. – niaher

1

我最近發佈了一個解決方案......

我的解決方案可以在您構建解決方案的時候自動創建NuGet包,其中每個包可以包含多個程序集,同一個構建過程中創建的外部NuGets和NuGets的引用,甚至包括用於調試的源代碼。

就你而言,你需要做的就是爲你的解決方案添加一個新的類庫項目,引用你想打包的項目,然後添加一個後期構建事件。

您可以在walk-through guide heresource code + binary here中找到一篇文章。

+0

指南鏈接關閉... –

+0

@Stefan修復了鏈接 –

1

我有一些教程,我如何與Windows和Visual Studio做到了:

創建本地文件夾,並調用它包,比如:C:/包// LIB - 重要的是要創建文件夾的另一個文件夾稱它爲lib和過去那裏DLL。

開放NuGet包探險家 - https://npe.codeplex.com/downloads/get/clickOnce/NuGetPackageExplorer.application

的用戶界面非常直觀只需添加DLL和它導出到/ lib目錄(對於教程https://blog.zwezdin.com/2014/building-nuget-packages-with-gui-tool/它在俄羅斯,但看到照片上的流動是約3次點擊)

它將創建nuspec文件

開放GIT BASH - https://git-for-windows.github.io/並導航到:CD C:=> CD包(路徑)

*也許在Windows上,您將需要提供開發商適用於Windows的Linux的東西選項(https://www.howtogeek.com/249966/how-to-install-and-use-the-linux-bash-shell-on-windows-10/

在GIT BASH輸入命令:添加的NuGet -source [選項]

其中:nuspec的全名(包括.nuspec)

和:路徑(:/包// LIB C)

行動成功

結束了GIT BASH後輸入另一個命令:

文件夾中的文件夾lib中的

nuget pack .nuspec

不在此文件夾中您有.nupkg文件。

How to install a Nuget Package .nupkg file locally? - 教程如何將它添加到visual studio。

0

我有同樣的問題,我決定創建Nuget,這將允許從選定的項目中創建其他nugets。

程序包部署在Nuget.org site上。在項目中引用它之後您需要將nuspeck文件添加到應生成項目的項目中。

應該由你來完成

Project with the required nuspeck file

最後一件事是在包管理器調用命令創建,Nuspec。與PowerShell模塊相比,所有的庫都是構建的結果,它還會添加所需的依賴關係,並在輸出目錄中創建nuget。