我想在构建时设置我的.net核心库的程序集版本(以及文件版本和nuget包版本)。我的库是使用最新的Visual Studio 2017 RC编写的,因此不再有projects.json
文件,并且由TeamCity正在使用标准的PowerShell构建脚本来调用dotnet restore
dotnet build
dotnet test
和当然dotnet pack
。
一直在网上搜索一个优雅的解决方案,但却找不到任何接近它的东西。我在互联网上找到的只是现在过时的xproj
和projects.json
格式。
我很惊讶dotnet build
和dotnet pack
命令不支持开箱即用。
谢谢:)
答案 0 :(得分:5)
如果有其他人出现并且需要这个,请将其添加到您的csproj:
<PropertyGroup>
<Version>1.2.3.4</Version>
<PackageId>$(AssemblyName)</PackageId>
<Title>My Super Library</Title>
<AssemblyTitle>$(AssemblyName)</AssemblyTitle>
<Company>AwesomeCo, Inc.</Company>
<Product>My Super Library</Product>
<Copyright>Copyright © AwesomeCo, Inc. 2016-2017</Copyright>
<Description>There can be only one.</Description>
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
<GenerateAssemblyTitleAttribute>true</GenerateAssemblyTitleAttribute>
<GenerateAssemblyConfigurationAttribute>true</GenerateAssemblyConfigurationAttribute>
<GenerateAssemblyCompanyAttribute>true</GenerateAssemblyCompanyAttribute>
<GenerateAssemblyProductAttribute>true</GenerateAssemblyProductAttribute>
<GenerateAssemblyCopyrightAttribute>true</GenerateAssemblyCopyrightAttribute>
<GenerateAssemblyVersionAttribute>true</GenerateAssemblyVersionAttribute>
<GenerateAssemblyInformationalVersionAttribute>true</GenerateAssemblyInformationalVersionAttribute>
</PropertyGroup>
我们的PackageId
显然与我们的项目名称相同,但您可以更改它。
您可以在csproj中对$(版本)进行硬编码,或者在发布/打包时将其发送:
dotnet publish /property:Version=1.2.3.4
答案 1 :(得分:0)
对于那些仍然想知道如何在不严重修改csproj
文件的情况下执行此操作的人,您可以将msbuild
参数与dotnet
命令一起传递,在这种情况下,我们可以简单地执行
dotnet build /p:Version=1.2.3
dotnet publish /p:Version=1.2.3
这会将程序集和文件版本都设置为1.2.3
。我已经使用.Net Core 2 SDK验证了
答案 2 :(得分:0)
我知道这已经得到了答案,但是有一种使用环境变量并且不需要所有标签的方法
编辑您的项目文件(csproj),并包含以下基于条件的版本标记
<Version Condition=" '$(BUILD_NUMBER)' == '' ">0.0.0</Version>
<Version Condition=" '$(BUILD_NUMBER)' != '' ">$(BUILD_NUMBER)</Version>
此处BUILD_NUMBER是TeamCity公开的环境变量。如果内部版本号为30,则上面的版本为30.0.0.0
请注意,如果不存在BUILD_NUMBER变量,则版本号将全为零(0.0.0)。
希望这为上述提供了另一种方法