2016-11-13 43 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'哦。