c#

您所在的位置:网站首页 怎么修改文件版本号码 c#

c#

2024-07-11 04:39| 来源: 网络整理| 查看: 265

这个问题与 Setting the version number for .NET Core projects 非常相似,但不一样。使用撰写本文时最新的稳定版本 .NET Core (1.1) 和 VS2017,.NET Core 已从基于 JSON 的项目文件切换为 CSPROJ 文件。

所以 - 我想做的是建立一个 CI 环境,我希望能够在构建之前修改一些东西,以便用正确的版本号标记我的构建。 p>

如果我使用像这样的旧属性(SharedAssemblyInfo.cs 技巧):

[assembly: AssemblyFileVersion("3.3.3.3")] [assembly: AssemblyVersion("4.4.4.4")]

在项目的某个地方,我得到了 CS0579 - 重复“System.Reflection.AssemblyFileVersionAttribute” 和 CS0579 - 重复“System.Reflection.AssemblyVersionAttribute” 构建时出错。

当深入研究它时,我发现在 \obj\Debug\netcoreapp1.1 中有一个在构建过程中生成的文件(在构建之前它不存在):

//------------------------------------------------------------------------------ // // 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. // //------------------------------------------------------------------------------ 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 文件的更改脚本,在我看来,这相当老套,因为我需要修改的部分看起来像这样......

Exe netcoreapp1.1 1.0.7777.0 1.0.8888.0 1.0.9999.0 MyCompany AuthorName ProductName Copyright © 2017

所以 - 这里的问题是有多个“PropertyGroup”元素;其他的似乎都有标签 - 但不知道 CSPROJ 是如何组合在一起的,我不能说情况总是如此。

我的工作前提是包详细信息将始终被填写,否则值标签(上面)不会出现在 XML 中 - 因此我可以使用脚本来更新适当的值。如果值标签不存在,我将不清楚将值插入到哪个 PropertyGroup 元素(以及哪个顺序,因为这似乎很重要;更改顺序阻止我在 VS2017 中加载项目)。

我仍然坚持寻找比这个更好的解决方案!

更新:在有人将此问题标记为可能重复的问题( Auto Versioning in Visual Studio 2017 (.NET Core) )之后 - 我以前没有见过这个问题,现在阅读它似乎几乎相同,只是我不想设置版本号。另外,这个问题的答案并不能解决我的问题 - 只问我在问题中问的问题。我的问题所接受的答案正是我解决问题所需的答案 - 因此,虽然另一个问题首先出现并且看起来相同 - 它根本对我没有帮助。也许模组可以提供帮助?

最佳答案

您可以通过传递 /p:PropertyName=Value 从命令行覆盖任何属性作为 dotnet restore 的参数, dotnet build和dotnet pack .

目前,版本组合的工作方式如下: 如果Version未设置,请使用 VersionPrefix (如果未设置,则默认为 1.0.0)并且 - 如果存在 - 附加 VersionSuffix .

所有其他版本都默认为 Version是。

例如,您可以设置 1.2.3在你的.csproj然后调用dotnet pack --version-suffix beta1产生 YourApp.1.2.3-beta1.nupkg (如果您有一个项目引用,并且希望应用版本后缀,则需要在此之前调用 dotnet restore /p:VersionSuffix=beta1 - 这是工具中的一个已知错误)。

当然,您也可以使用自定义变量,参见this GitHub issue举几个例子。

有关受支持的程序集属性的完整引用,我建议查看构建逻辑的源代码 here ($() 包围的值是使用的属性)。 因为我已经在谈论来源了,this是组成版本和其他一些属性的逻辑。

关于c# - 设置 .NET Core 项目的版本号 - CSPROJ - 而不是 JSON 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43274254/



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3