在构建时设置.net核心库程序集/文件/ nuget包版本

时间:2017-02-17 08:51:10

标签: .net build .net-core

我想在构建时设置我的.net核心库的程序集版本(以及文件版本和nuget包版本)。我的库是使用最新的Visual Studio 2017 RC编写的,因此不再有projects.json文件,并且由TeamCity正在使用标准的PowerShell构建脚本来调用dotnet restore dotnet build dotnet test和当然dotnet pack

一直在网上搜索一个优雅的解决方案,但却找不到任何接近它的东西。我在互联网上找到的只是现在过时的xprojprojects.json格式。

我很惊讶dotnet builddotnet pack命令不支持开箱即用。

谢谢:)

3 个答案:

答案 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)。

希望这为上述提供了另一种方法