我有一个由核心nuget包组成的项目,然后是几个额外的扩展包。
核心软件包有一个如下所示的nuspec:
<?xml version="1.0"?>
<package>
<metadata>
<id>$id$</id>
<version>$version$</version>
<title>The Core Package</title>
<authors>$author$</authors>
<owners>$author$</owners>
<description>$description$</description>
</metadata>
</package>
而且,在每个扩展包中,我都有这样的nuspec:
<?xml version="1.0"?>
<package>
<metadata>
<id>$id$</id>
<version>$version$</version>
<title>A Extension Package</title>
<authors>$author$</authors>
<owners>$author$</owners>
<dependencies>
<dependency id="The.Core" version="$version$"/>
</dependencies>
</metadata>
</package>
在运行发布版本时,我使用相同的$ version $令牌一次性修改所有包。这使得每当我发布时,对核心的依赖性都会向前发展。
现在,我一直在私人nuget Feed上使用它,它一直很好用。但是,我想将这些软件包作为预发布版本发布到public nuget。我在所有程序集上设置了Assembly Version属性:
[assembly: AssemblyFileVersion("1.0.1")]
[assembly: AssemblyInformationalVersion("1.0.1-alpha")]
然而,当我运行nuget pack(来自我的构建服务器)时,它似乎没有获得1.0.1-alpha作为软件包的版本:
[pack] Starting NuGet.exe 2.7.40906.75 from C:\TeamCity\buildAgent\tools\NuGet.CommandLine.DEFAULT.nupkg\tools\NuGet.exe
[14:21:46][pack] WARNING: Option 'Verbose' has been deprecated. Use 'Verbosity' instead.
[14:21:46][pack] Attempting to build package from 'The.Core.csproj'.
[14:21:46][pack] Packing files from 'C:\TeamCity\buildAgent\work\857bd09f14af8e44\src\The.Core\bin\Release'.
[14:21:46][pack] Using 'The.Core.nuspec' for metadata.
[14:21:46][pack]
[14:21:46][pack] Id: The.Core
[14:21:46][pack] Version: 1.0.1
[14:21:46][pack] Authors: Jonathan Holland
[14:21:46][pack] License Url: http://www.apache.org/licenses/LICENSE-2.0
[14:21:46][pack] Dependencies: None
[14:21:46][pack]
[14:21:46][pack] Added file 'lib\net40\The.Core.dll'.
[14:21:46][pack]
[14:21:46][pack] Successfully created package 'C:\TeamCity\buildAgent\work\Publish\The.Core.1.0.1.nupkg'.
[14:21:46][pack] Process exited with code 0
你可以看到它获得1.0.1作为版本,而不是像我期望的那样获得1.0.1-alpha。
当构建服务器尝试打包第一个扩展时,事情变得更加棘手:
[pack] Starting NuGet.exe 2.7.40906.75 from C:\TeamCity\buildAgent\tools\NuGet.CommandLine.DEFAULT.nupkg\tools\NuGet.exe
[14:21:46][pack] WARNING: Option 'Verbose' has been deprecated. Use 'Verbosity' instead.
[14:21:46][pack] Attempting to build package from 'The.Core.Extension.csproj'.
[14:21:46][pack] Packing files from 'C:\TeamCity\buildAgent\work\857bd09f14af8e44\src\he.Core.Extension\bin\Release'.
[14:21:46][pack] Using 'The.Core.Extension.nuspec' for metadata.
[14:21:46][pack] Found packages.config. Using packages listed as dependencies
[14:21:46][pack] A stable release of a package should not have on a prerelease dependency. Either modify the version spec of dependency "The.Core (ò 1.0.1-alpha)" or update the version field.
[14:21:46][pack] Process exited with code 1
所以,这里我们有一个失败,因为nuspec的dependancy部分中的$ version $已正确替换为&#34; 1.0.1-alpha&#34;但是在版本节点中,它被替换为1.0。 1。
这是非常奇怪的行为,所以我必须做一些完全错误的事情。我认为这是nuspecs的简单搜索和替换令牌,但必须有一些上下文来表示令牌行为的工作方式。
我想要&lt;版本&gt;两个nuspecs上的节点都使用AssemblyInformationalVersion中的版本,它们应该从文档中可以看出。
答案 0 :(得分:1)
经过大量的探索后,我发现问题来自TeamCity Nuget Build Runner:
此框中填充了%build_number%,并且这与nugets自己对装配属性的反射有所冲突。
将其设置为空白修复它。
答案 1 :(得分:0)
我正在尝试做同样的事情并且表现得非常奇怪。
替换令牌$ version $在<version></version>
标记内被正确替换,但在任何依赖项中都没有
<dependency id="Norse.Core.Exceptions" version="$version$" />
最终像
<dependency id="Norse.Core.Exceptions" version="1.0.0" />
我添加了一个新的Build Feature,File Content Replacer并按如下方式进行设置,
处理文件列表: ** / *。nuspec * .nuspec
找到:\ $ version \ $
替换为:%system.build.version%
system.build.version是我之前在此过程中定义的参数,您可以将其设置为您喜欢的任何内容。
希望它有所帮助。
由于
史蒂夫