自动版本控制——我是如何做到的

73 篇文章 3 订阅

目录

介绍

使用代码


介绍

我正在开发一个应用程序,我的思绪飘向了版本控制的主题。我看到他们对微软缺乏意愿(或者更有可能是他们没有能力)来解决开发人员普遍关心的问题——在项目构建时自动增加版本号而感到苦恼。过了一会儿,我想出了一种似乎完全按照我想要的方式工作的方法。

该项目是一个MVC 5.Net FrameworkWeb应用程序,当我进行构建时,二进制文件将放入解决方案的bin文件夹中。此文件夹也与我的应用程序一起部署,正是这种认识触发了以下想法。

简而言之,我*忽略*程序集中定义的assembly.cs(毕竟,这是我们无法自动增加版本号的根源),而是依赖于bin文件夹中二进制文件的上次写入日期时间。真的就是这么简单。

这是因为除非重新编译程序集,否则给定程序集的文件日期不会更改。因此,使用F5在调试器下运行应用(不更改任何内容)的操作不会导致日期更改,更重要的是,仅运行应用不会导致文件日期更改,因为编译器未生成新的程序集。

我知道,这是半途而废的,因为这种方法行不通的各种原因(当您是新手并从源代码管理中获取最新代码并进行构建时,版本将与生产中的版本不同),但我从来没有说过这是最好的方法做到这一点。这只是一种方法。

使用代码

代码真的非常简单,我只是将该方法放入我调用Global的静态类中......

public static string AppVersion { get; set; }

// Using a file mask allows you to specify more than one 
// file/extension as well as utilize wildcards, which 
// makes the method usable in desktop apps as well.
public static void FindNewestBinary(string path, string fileMask)
{
    DateTime date =  new DateTime(2022, 01, 01);
    try
    {
        DirectoryInfo dir = new DirectoryInfo(path);
        FileInfo file = dir.GetFiles(fileMask)
                        .OrderByDescending(x=>x.LastWriteTime)
                        .FirstOrDefault();
        if (file != null)
        {
            date =  file.LastWriteTime;
        }
    }
    catch (Exception)
    {
    }
    int seconds = date.Hour * 60 +
                    date.Minute * 60 + 
                    date.Second;
    string fileDate = date.ToString("yyyy.MM.dd.");
    Global.AppVersion = string.Format("{0}{1:00000}", fileDate, seconds); 
}
}

...并从global.asax.cs文件中的Application_Start()方法调用它。

Global.FindNewestBinary(Server.MapPath(@"bin"), "*.dll");

然后每当我需要版本时,我只需引用Global.AppVersion属性,如下所示:

<span>@Global.AppVersion</span>

https://www.codeproject.com/Tips/5334159/Automatic-Versioning-How-I-Do-It

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值