加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-core – 设置.NET Core项目的版本号

发布时间:2020-12-16 00:36:57 所属栏目:asp.Net 来源:网络整理
导读:使用.NET Core / ASP.NET Core项目设置项目版本的选项有哪些? 发现到目前为止 在project.json中设置version属性。来源:DNX Overview,Working with DNX projects.这似乎设置了AssemblyVersion,AssemblyFileVersion和AssemblyInformationalVersion,除非被
使用.NET Core / ASP.NET Core项目设置项目版本的选项有哪些?

发现到目前为止

>在project.json中设置version属性。来源:DNX Overview,Working with DNX projects.这似乎设置了AssemblyVersion,AssemblyFileVersion和AssemblyInformationalVersion,除非被属性覆盖(见下一个点)。
>设置AssemblyVersion,AssemblyFileVersion,AssemblyInformationalVersion属性似乎也可以工作并覆盖在project.json中指定的版本属性。

例如,在project.json中包含’version’:’4.1.1- *’,并在.cs文件中设置[assembly:AssemblyFileVersion(“4.3.5.0”)]将导致AssemblyVersion = 4.1.1.0,AssemblyInformationalVersion = 4.1 .1.0和AssemblyFileVersion = 4.3.5.0

通过属性设置版本号,例如AssemblyFileVersion,仍然支持?

我错过了什么 – 还有其他方法吗?

上下文

我正在寻找的方案是在多个相关项目之间共享单个版本号。一些项目使用.NET Core(project.json),其他项目使用完整的.NET Framework(.csproj)。所有这些都在逻辑上是单个系统的一部分,并且一起版本化。

到目前为止,我们使用的策略是使用AssemblyVersion和AssemblyFileVersion属性在我们的解决方案的根目录下有一个SharedAssemblyInfo.cs文件。这些项目包括一个指向该文件的链接。

我正在寻找方法来实现与.NET Core项目相同的结果,即要修改单个文件。

解决方法

为什么不更改project.json文件中的值。使用 CakeBuild可以做这样的事情(优化可能)
Task("Bump").Does(() => {
    var files = GetFiles(config.SrcDir + "**/project.json");
    foreach(var file in files)
    {
        Information("Processing: {0}",file);

        var path = file.ToString();
        var trg = new StringBuilder();
        var regExVersion = new System.Text.RegularExpressions.Regex(""version":(s)?"0.0.0-*",");
        using (var src = System.IO.File.OpenRead(path))
        {
            using (var reader = new StreamReader(src))
            {
                while (!reader.EndOfStream)
                {
                    var line = reader.ReadLine();
                    if(line == null)
                        continue;

                    line = regExVersion.Replace(line,string.Format(""version": "{0}",",config.SemVer));

                    trg.AppendLine(line);
                }
            }
        }

        System.IO.File.WriteAllText(path,trg.ToString());
    }
});

那么如果你有一个依赖项目的UnitTest项目,使用“*”进行依赖解析。

另外,做dotnet还原之前做碰撞。我的订单如下所示:

Task("Default")
  .IsDependentOn("InitOutDir")
  .IsDependentOn("Bump")
  .IsDependentOn("Restore")
  .IsDependentOn("Build")
  .IsDependentOn("UnitTest");

Task("CI")
  .IsDependentOn("Default")
  .IsDependentOn("Pack");

链接到完整版脚本:https://github.com/danielwertheim/Ensure.That/blob/3a278f05d940d9994f0fde9266c6f2c41900a884/build.cake

实际值,例如该版本来自于在构建脚本中导入单独的build.config文件:

#load "./buildconfig.cake"

var config = BuildConfig.Create(Context,BuildSystem);

配置文件看起来像这样(从https://github.com/danielwertheim/Ensure.That/blob/3a278f05d940d9994f0fde9266c6f2c41900a884/buildconfig.cake开始):

public class BuildConfig
{
    private const string Version = "5.0.0";

    public readonly string SrcDir = "./src/";
    public readonly string OutDir = "./build/";    

    public string Target { get; private set; }
    public string Branch { get; private set; }
    public string SemVer { get; private set; }
    public string BuildProfile { get; private set; }
    public bool IsTeamCityBuild { get; private set; }

    public static BuildConfig Create(
        ICakeContext context,BuildSystem buildSystem)
    {
        if (context == null)
            throw new ArgumentNullException("context");

        var target = context.Argument("target","Default");
        var branch = context.Argument("branch",string.Empty);
        var branchIsRelease = branch.ToLower() == "release";
        var buildRevision = context.Argument("buildrevision","0");

        return new BuildConfig
        {
            Target = target,Branch = branch,SemVer = Version + (branchIsRelease ? string.Empty : "-b" + buildRevision),BuildProfile = context.Argument("configuration","Release"),IsTeamCityBuild = buildSystem.TeamCity.IsRunningOnTeamCity
        };
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读