这个问题非常类似于 Setting the version number for .NET Core projects,但是不一样。使用最新的稳定版本。NET 核心在编写本文时(1.1)和 VS2017,。NET 核心已经从基于 JSON 的项目文件切换到 CSPROJ 文件。
因此,我正在尝试做的是建立一个 CI 环境,我希望能够修改 什么的之前的一个构建,以戳记我的构建与正确的版本号。
如果我像这样使用属性( sharedassemblyinfo.cs 技巧) :
[assembly: AssemblyFileVersion("3.3.3.3")]
[assembly: AssemblyVersion("4.4.4.4")]
在项目的某个地方,我明白了
CS0579 - Duplicate 'System.Reflection.AssemblyFileVersionAttribute'
还有
CS0579 - Duplicate 'System.Reflection.AssemblyVersionAttribute'
构建时的错误。
深入研究后,我发现在 \obj\Debug\netcoreapp1.1
中有一个类似于构建过程中生成的文件(在我构建之前它不存在) :
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("TestApplication")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyDescriptionAttribute("Package Description")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.1.99.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.1.99")]
[assembly: System.Reflection.AssemblyProductAttribute("TestApplication")]
[assembly: System.Reflection.AssemblyTitleAttribute("TestApplication")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.1.99.0")]
// Generated by the MSBuild WriteCodeFragment class.
提问,我该怎么做?
所以我可以看到,这必须以某种方式生成的值输入到项目属性’包页’,但我不知道什么是正确的方式来改变这些值在我的 CI 机器。
理想情况下,我希望能够在我的(Jenkins) CI 脚本中指定所有这些信息,但是我将仅仅满足于能够设置版本号。
编辑-更多资讯
After reading the first answer, I wanted to make it clear that I am creating both services and NuGET packages - and I would prefer to have 1 way of versioning everything, which would be like the old JSON project where I could just update a single file.
更新 我要去脚本的 CSPROJ 文件的变化,这在我看来是相当生疏的一节,我需要修改看起来像这样..。
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp1.1</TargetFramework>
<Version>1.0.7777.0</Version>
<AssemblyVersion>1.0.8888.0</AssemblyVersion>
<FileVersion>1.0.9999.0</FileVersion>
<Company>MyCompany</Company>
<Authors>AuthorName</Authors>
<Product>ProductName</Product>
<Description />
<Copyright>Copyright © 2017</Copyright>
</PropertyGroup>
所以-这里的问题是有多个’PropertyGroup’元素; 其他元素似乎被标记了-但是不知道 CSPROJ 是如何组合在一起的,我不能说总是如此。
我工作的前提是包的细节总是被填充,否则值标签(上面)不会出现在 XML 中-这样我就可以使用脚本来更新到位的值。如果没有 value 标签,我就不清楚要将值插入到哪个 PropertyGroup 元素中(以及哪个顺序,因为这似乎很重要; 更改顺序会阻止我在 VS2017中加载项目)。
I am still holding out for a better solution than this one!
更新: 有人标记这个问题为一个可能的重复(VisualStudio2017中的自动版本控制(.NETCore))-我以前没有看到这个问题,现在阅读它似乎是几乎相同的,除了我不只是想设置版本号。而且,这个问题的答案并不能解决我的问题——只能问我在问题中提出的问题。对于我的问题,公认的答案正是我解决问题所需要的答案——因此,尽管另一个问题首先出现,而且看起来一样——但它对我一点帮助也没有。也许国防部能帮上忙?