我正在自动化我的.NET标准项目(VS 2017的新csproj格式),以便在构建之后生成nuget包。
问题是我希望解决方案中的所有项目都遵循我的AppVeyor版本的版本,而不是在csprojs的Package属性中设置的版本(默认为1.0.0)。
另一件要考虑的事情是我的项目之间有引用,并且应该保留AppVeyor构建版本。
有一种简单的方法吗?怎么样?
答案 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 patching和automatic 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中跟踪此内容。