我正在尝试创建一个 NuGet 预发布包。这是我的NuSpec文件:
<?xml version="1.0"?>
<package >
<metadata>
<id>xxx.Web.Mvc</id>
<version>1.0.3-prelrelease1</version>
<authors>xxx</authors>
<owners>xxx</owners>
<projectUrl>https://xxx</projectUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>xxxx.</description>
<releaseNotes>NuGet package.</releaseNotes>
<copyright>Copyright 2013 xxx</copyright>
<tags>asmx xxx</tags>
<dependencies>
<dependency id="Microsoft.AspNet.Mvc" version="4.0.30506.0" />
<dependency id="Microsoft.AspNet.Razor" version="2.0.30506.0" />
<dependency id="Microsoft.AspNet.WebPages" version="2.0.30506.0" />
<dependency id="Microsoft.Web.Infrastructure" version="1.0.0.0" />
<dependency id="xxx" version="1.0.6" />
</dependencies>
</metadata>
</package>
注意 我正在使用预发布版本的 SemVer 机制。
但是,当我使用以下方法构建软件包时:
PM> nuget pack Package.nuspec
我得到:
nuget : Input string was not in a correct format.
At line:1 char:1
+ nuget pack Package.nuspec
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (Input string wa...correct format.:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
这直接是指我在版本字符串中有字母字符。
我正在使用NuGet 2.2/VS2012。
为什么无法识别我的版本字符串?
更新
我已将文件缩减为:
<?xml version="1.0"?> <package > <metadata>
<id>xxx</id>
<version>1.0.3-test1</version>
<authors>xxx</authors>
<owners>xxx</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>xxx</description> </metadata> </package>
和 ~content
文件夹中的单个文件:
- ~\content\New Journal Document.jnt
(我第一次看到Windows Journal。以为我会尝试制作一个简单的文件。:/)
修复了它。
尽管重新安装了NuGet 2.x,但似乎我仍然有一个v1.5。
似乎Powershell环境使用此版本,并且Package Manager Console Host Version 2.7.40911.225
消息不涉及PowerShell的版本,仅指主机。现在我知道了,这似乎很明显。
我已经对文件进行了人为处理并覆盖了它。
现在都在工作。
所以这两个:
NuGet.exe" pack ".MyPackage.nuspec" -Version 1.0.1-alpha
和
<?xml version="1.0" encoding="utf-8"?>
<package>
<metadata>
<id>MyCoolPackage</id>
<version>1.0.1-alpha</version>
<authors>MyAuthors</authors>
<owners>MyOwner</owners>
<!-- <licenseUrl>http://www.yourLicenseUrl.com</licenseUrl> -->
<projectUrl>http://www.yourProjectUrl</projectUrl>
<iconUrl>http://www.yourIconUrl.com</iconUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>BuildDate : 2013_10_16__17:13:46</description>
<releaseNotes>My Release Notes.</releaseNotes>
<copyright>Copyright 2013</copyright>
<tags>MyTag1 MyTag2</tags>
<dependencies>
<!--
<dependency id="SampleDependency" version="1.0" />
-->
</dependencies>
</metadata>
</package>
为我工作。
我使用的是 2.7.40809.172。
所以试试:
( 数字 1 )
拿出你的
<dependencies>
(只为踢)
( 数字 2 )
~尝试更高版本的
NuGet.exe
(虽然基于文档,你应该没问题)
我拉了
1.0.1-alpha
直接来自文档。
从这个开始,然后逐步提高到您的自定义值。
http://docs.nuget.org/docs/reference/versioning
所以我拿了你的 nuspec ,并将其放入我的演示代码中。
它奏效了! (我正在xml更新描述,仅供参考,因此差异很小)(请参阅下面的 XML)
但是我创建了一个不错的"xxx.Web.Mvc.1.0.3-prelrelease1.nupkg"文件。
<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
<metadata>
<id>xxx.Web.Mvc</id>
<version>1.0.3-prelrelease1</version>
<authors>xxx</authors>
<owners>xxx</owners>
<projectUrl>https://xxx</projectUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>BuildDate : 2013_10_17__11:29:15</description>
<releaseNotes>NuGet package.</releaseNotes>
<copyright>Copyright 2013 xxx</copyright>
<tags>asmx xxx</tags>
<dependencies>
<dependency id="Microsoft.AspNet.Mvc" version="4.0.30506.0" />
<dependency id="Microsoft.AspNet.Razor" version="2.0.30506.0" />
<dependency id="Microsoft.AspNet.WebPages" version="2.0.30506.0" />
<dependency id="Microsoft.Web.Infrastructure" version="1.0.0.0" />
</dependencies>
</metadata>
</package>
所以也许它与"内容"有关,而不是规格。
所以你可以做一个"基本"包,比如:
.Package.nuspec
.content
.contentSomeImageFile.png
.lib
.libnet20SomeDll.dll
看看这是否适用于具有预发布版本控制的 Nuspec 文件?