此问题与设置.NET Core项目的版本号非常相似,但不相同。在撰写本文(1.1)和VS2017时,使用.NET Core的最新稳定版本,.NET Core已从基于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脚本中指定所有这些信息,但是我只希望能够设置版本号。
编辑-更多信息
阅读第一个答案后,我想表明我同时创建了服务和NuGET包-我希望采用一种对所有内容进行版本控制的方式,这就像旧的JSON项目一样,更新单个文件。
更新 我正在编写脚本以编写对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中-因此,我可以使用脚本来就地更新值。如果值标签不存在,我将不清楚将值插入哪个PropertyGroup元素(以及哪个顺序,因为这似乎很重要;更改顺序使我无法在VS2017中加载项目)。
我仍在寻求比这更好的解决方案!
更新:在有人将此问题标记为可能的重复问题之后(Visual Studio 2017(.NET Core)中的自动版本控制)-我之前从未见过此问题,现在阅读它似乎几乎是相同的,只是我不想设置版本号。另外,此问题的答案不能解决我的问题-仅询问我在问题中提出的内容。我的问题的公认答案恰好是我解决问题所需要的答案-因此,当另一个问题排在第一位并且看起来相同时-根本没有帮助。也许mod可以帮上忙吗?