如何在AppVeyor中使用dotnet pack?

时间:2017-06-24 20:04:35

标签: .net nuget pack appveyor

我正在自动化我的.NET标准项目(VS 2017的新csproj格式),以便在构建之后生成nuget包。

问题是我希望解决方案中的所有项目都遵循我的AppVeyor版本的版本,而不是在csprojs的Package属性中设置的版本(默认为1.0.0)。

另一件要考虑的事情是我的项目之间有引用,并且应该保留AppVeyor构建版本。

有一种简单的方法吗?怎么样?

2 个答案:

答案 0 :(得分:3)

您可以将版本作为MSBuild属性传递给dotnet pack

dotnet pack MyProject.csproj --configuration Release /p:Version="1.2.3"

(这适用于dotnet build

以下是FakeItEasy build script中的示例。

要获取AppVeyor内部版本号,请使用APPVEYOR_BUILD_VERSION environment variable

  

另一件要考虑的事情是我的项目之间有引用,并且应该保留AppVeyor构建版本。

这应该不是问题,因为您没有在<ProjectReference>元素中指定版本。

答案 1 :(得分:2)

更新: .NET Core .csproj files patchingautomatic nuget packaging for .NET Core projects现在可以使用。

选项很少:

使用PowerShell手动修补.NET Standard .csproj文件。在此示例中,我们更新了版本,但您也可以通过这种方式更新其他设置。

$xmlPath = "$env:appveyor_build_folder\MyProject\MyProject.csproj"
$xml = [xml](get-content $xmlPath)
$propertyGroup = $xml.Project.PropertyGroup | Where { $_.Version}
$propertyGroup.Version = $env:appveyor_build_version
$xml.Save($xmlPath)
msbuild %appveyor_build_folder%\MyProject\MyProject.csproj /t:pack 

或者如果您想继续使用.nuspec文件,可以使用以下命令打包:

msbuild %appveyor_build_folder%\MyProject\MyProject.csproj /t:pack /p:Configuration=%CONFIGURATION%;NuspecFile=MyProject\MyProject.nuspec;PackageVersion=%APPVEYOR_BUILD_VERSION%

当然你可以使用dotnet pack,但我们认为前进msbuild仍将是主要工具,因此我们尝试使用它来完成所有脚本。

毋庸置疑,我们AppVeyor应该不再需要此脚本,我们会在https://github.com/appveyor/ci/issues/1404中跟踪此内容。