2016-11-13 44 views
3

我試圖通過命令行創建一個NuGet包,我似乎無法弄清楚如何設置Description,Author,Title,Summary,releaseNotes和Owner。該包成功創建它只是給了我這樣的警告:Nuget.exe包警告:未指定說明。使用'描述'

WARNING: Description was not specified. Using 'Description'. 
WARNING: Author was not specified. Using 'User'. 

這裏是我的命令:

NuGet.exe pack "<MyProjectPath>.csproj" -OutputDirectory "<MyOutputDirectory>" -Properties Configuration=release;Description="MyDescription";Authors="MeMeMe...MeToo";Title="MyTitle";Summary="MySummary";releaseNotes="MyChanges;"Owners="MyCompany" 

我不知道這事,但我使用的是從附帶的NuGet.exe從Visual Studio Team Services下載的「CredentialProviderBundle.zip」文件。

+0

您是否在AssemblyInfo.cs文件中指定了AssemblyCompany和AssemblyDescription值?如果是這樣,你可以用新項目重現這個問題嗎? –

+0

我創建了一個新的類庫項目。我根本沒有修改AssemblyInfo.cs文件。 AssemblyCompany和AssemblyDescription都是一個空字符串。同樣確切的問題。 – LorneCash

+0

然後,我指定了AssemblyCompany和AssemblyDescription,它們現在被填充到nuspec文件中,並且沒有警告,但它們使用AssemblyInfo.cs中的值填充,而不是我在命令行中指定的值。還有摘要和releaseNotes沒有添加到nuspec文件中。 – LorneCash

回答

2

這個命令其實幾乎沒有什麼問題。

這是不可能做到的問題問什麼沒有一些先決條件。

  1. 在* .csproj所在的同一目錄中必須有一個* .nuspec文件,它們具有相同的確切名稱。
  2. 的* .nuspec文件必須包含所有你想通過命令行來設置
  3. 將通過命令行來填充所有元素都必須包含形式爲「$ tokenName $」
  4. 在令牌元素命令行你不能指定* .nuspec元素名稱,而是包含在美元符號(AKA令牌名)
  5. 令牌名稱可以相同,作爲與問題中列出的所有屬性的元素名稱之間的值Description元素的例外。 Description元素的標記不能被命名爲「Description」。 「Desc」在這裏完美無缺。 (這就是爲什麼我說的話簡直沒有錯的問題,列出的命令)

下面是這個特定例如* .nuspec文件的例子:

<?xml version="1.0"?> 
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd"> 
    <metadata> 
     <id>$Id$</id> 
     <version>$Version$</version> 
     <title>$Title$</title> 
     <authors>$Authors$</authors> 
     <owners>$Owners$</owners> 
     <requireLicenseAcceptance>false</requireLicenseAcceptance> 
     <description>$Desc$</description> 
     <summary>$Summary$</summary> 
     <releaseNotes>$ReleaseNotes$</releaseNotes> 
     <copyright>Copyright © 2016</copyright> 
     <dependencies /> 
    </metadata> 
</package> 

ID和版本別t需要有令牌,因爲它們會自動被覆蓋,但不會造成傷害。

這裏的上述規定,你應該與* .nuspec文件中使用的命令行:

NuGet.exe pack "<MyProjectPath>.csproj" -OutputDirectory "<MyOutputDirectory>" -Properties Configuration=release;Desc="MyDescription";Authors="MeMeMe...MeToo";Title="MyTitle";Summary="MySummary";ReleaseNotes="MyChanges;"Owners="MyCompany" 
+2

但是如果你不想使用nuspec文件呢? 我更喜歡只是從csproj打包,我用過的一些版本的nuget會從AssemblyInfo中獲取描述,但其他版本則沒有。 我更喜歡從csproj打包,因爲那樣我就不必更新nuspec了,當你改變依賴版本時,nuspec會變得非常單調乏味。從csproj打包只是自動更新依賴版本。 –

0

我知道這是相當老了,但我這個問題今天已經掙扎了一會兒。我跑

nuget pack SomeRandom.csproj -Properties Configuration=Release

,我是越來越「要求說明」的錯誤。

我最後再刪除文件nuspec和獲取的NuGet運行

nuget spec SomeRandom.csproj

然後,當我跑的NuGet收拾它工作得很好,以創建一個新的。奇怪,但可以幫助某人。

0

只需添加到這個職位,因爲這些都不完全幫助我,運行命令

nuget pack 

這將在您的解決方案的基礎創建Package.nuspec文件給你。完成此操作後,您必須將該文件重命名爲NameOfProject.nuspec。因此,如果我的項目名爲GameEngine.csproj,那麼我會將我的nuspec文件重命名爲GameEnginer.csproj。然後,將該文件移動到.csproj所在的文件夾(不是調試/發佈文件夾,只是包含所有手寫代碼文件的基本文件夾)。然後繼續運行

nuget pack RelativePathOfNameOfProject.csproj 

所以,如果我想打我GameEngine.csproj命令看起來像

nuget pack .\GameEngine\GameEngine.csproj 

由於我的文件夾結構看起來像:

root/ 
├── Folder1/ 
├── Folder2/ 
├── GameEngine/ 
│ ├── bin/ 
│ ├── obj/ 
│ ├── Properties/ 
│ ├── Class1.cs 
│ ├── Class2.cs 
│ ├── GameEngine.nuspec 
│ └── GameEngine.csproj 
├── packages/ 
└── GameEngine.sln/ 

希望之間這些答案,你可以找出它:)

1

萬一這有助於其他人,得到一個「描述是必需的」錯誤的一個愚蠢的原因:我沒有重建我的項目,因爲我添加了一個描述到我的AssemblyInfo。

我用<description>$description$</description>令牌在我的項目目錄中定義了一個nuspec文件。當我跑

nuget pack MyProject.csproj 

我看到了一個「需要說明」的錯誤,儘管我的AssemblyInfo包含[assembly: AssemblyDescription("A DESCRIPTION.")] ...

...因爲雖然你收拾.csproj,它是您最近構建的是實際上是由Nuget打包的。 D'哦。