2013-02-10 63 views
37

最近,我開始從我的幾個項目中收集nuget軟件包。首先,我開始使用Package Explorer應用程序。這是一個很好的工具,但是如果你進行持續集成,它的用處不大。然後,我考慮指定模板文件,並傳遞變化的數據,例如,版本號,作爲命令行參數。後來,我想知道如何定義nuget包的依賴關係。事實證明,如果您指定csproj,則nuget.exe已基於package.config執行此操作。此外,它從彙編信息中提取諸如作者,版本,版權等相關數據。我現在想念的是能夠在命令行中指定licenseUrl。但我希望這個問題更通用。所以我問:nuget-packing csproj與nuspec之間的差異

什麼是最好的方式來包裝nuget包?

回答

62

這裏有一個鮮爲人知的事實:你可以結合這兩個! 定位一個csproj文件,並確保在同一目錄中有一個與csproj文件同名的nuspec文件。 NuGet將在創建包時合併這兩者。

因此,在短期:目標<ProjectName>.csproj,任選添加到被用作由NuGet.exe元數據的對應tokenized<ProjectName>.nuspec文件。

它可以幫助您避免管理輸出位置,依賴項,版本以及其他可從項目中派生的內容。

+0

嗨澤維爾,感謝指出了這一點:)我已經發現這個[博客文章(http://blog.davidebbo.com/2011/04/easy-way-to-publish- nuget-packages-with.html),這也暗示了這種方法。這是否也在我從你的WarmCrocConf的書中得到描述?)偉大的演示文稿btw!) – Matthias 2013-02-11 14:57:55

+0

嗨馬提亞斯,謝謝!如果我沒有弄錯,它在第71頁提到:) – 2013-02-11 18:22:49

+3

是否可以從assemblyinfo獲取版本並且有nuspec? 我確實希望nuspec的作者和releasenotes位,但似乎我不得不處理nuspec中的版本標籤以及assemblyinfo – 2015-01-27 04:25:20

14

對於簡單的包裝,您可以直接創建包裝.csproj.vbproj。但是對於更高級的軟件包,尤其是當您需要將自定義文件放入軟件包時,您需要使用.nuspec。我通常從csproj開始,根據需要移動到nuspec。您始終可以使用csproj上的命令nuget spec獲取nuspec。

https://docs.nuget.org/create/creating-and-publishing-a-package

您可以指定任何屬性使用Properties參數包括licenseUrlnuget pack

nuget pack -properties licenseUrl=http://blah 
9

對於Visual Studio 2017的.csproj,您不需要.nuspec文件。您實際上可以將值直接添加到您的csproj中,並且它會將其選中。

右鍵單擊Visual Studio中的項目編輯xxxxx.csproj。記事本也可以正常工作。

<Project Sdk="Microsoft.NET.Sdk"> 
    <PropertyGroup> 
    <Version>1.0.1</Version> 
    <authors>Subtracts</authors> 
    <TargetFrameworks>netstandard1.6;net452</TargetFrameworks> 
    <AssemblyName>Checkout.net</AssemblyName> 
    <PackageId>Checkout.net</PackageId> 

... 

</Project> 

p.s.由於我沒有足夠的聲望發表評論,我將留下一個答案,而不是對澤維爾的答案發表評論。 :)

+0

當你想從Visual Studio編輯'.csproj'文件時,你需要在_Edit csproj_選項之前選擇_Unload Project_變得可用。 – Chrono 2017-04-07 08:09:02

+2

@Chrono這取決於項目類型,對於.NET Core和.NET Standard項目不是必需的。 – Stijn 2017-08-08 15:39:58

+2

@Chrono @Stijn當你使用新的csproj格式時(即以開頭),這是沒有必要的。您可以對.net框架項目使用新的csproj格式,包括WPF和WinForms項目。 – cube45 2017-11-20 09:46:48

1

使用.NET Core自2018年2月起,您需要爲基本規格文件屬性以外的文件提供.nuspec文件。

dotnet pack命令將不會使用.nuspec文件,除非您將<NuspecFile>relative path to nuspec</NuspecFile>添加到.csproj文件。

https://github.com/dotnet/cli/issues/2170