我正在自動化我的.NET標準項目(VS 2017的新csproj格式)以在構建之後生成nuget包。如何在AppVeyor中使用dotnet包?
的事情是,我想在解決方案的所有項目按照我AppVeyor構建的版本,而不是被設置的csprojs的包屬性中(即默認爲1.0.0)版本。
要考慮的另一件事是我的項目之間有引用,並應保留AppVeyor構建版本。
有沒有簡單的方法來做到這一點?怎麼樣?
我正在自動化我的.NET標準項目(VS 2017的新csproj格式)以在構建之後生成nuget包。如何在AppVeyor中使用dotnet包?
的事情是,我想在解決方案的所有項目按照我AppVeyor構建的版本,而不是被設置的csprojs的包屬性中(即默認爲1.0.0)版本。
要考慮的另一件事是我的項目之間有引用,並應保留AppVeyor構建版本。
有沒有簡單的方法來做到這一點?怎麼樣?
更新:.NET Core .csproj files patching和automatic nuget packaging for .NET Core projects現在工作。
有幾個選項:
做.NET標準.csproj
文件使用PowerShell的手動跳線。在這個示例中,我們更新了版本,但您也可以通過這種方式更新其他設置。
$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跟蹤這個。
您可以通過版本的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>
元素中指定版本。
我不認爲csproj應該有'Version'屬性。根據[this](https://docs.microsoft.com/en-us/nuget/guides/create-net-standard-packages-vs2017),它應該是'PackageVersion'。 –
根據[this](https://docs.microsoft.com/en-us/dotnet/core/tools/csproj),對於'PackageVersion',* default是$(Version)的值,也就是項目*中的屬性版本。所以,據我瞭解'版本'仍然有效,但'PackageVersion'更具體到Nuget包裝。 **加法**:我認爲對於AppVeyor中的自動修補,我們應該建議修補兩個選項並實際修補'.csproj'中真正存在的內容 – ilyaf