是以 1.2.3.4 的樣式呈現
對應在英文上
為 Major(1).Minor(2).Build(3).Revision(4)
現在針對每個欄位的意義
做一個簡單的說明
Major
通常是大更新,使的程式無法向下相容,這個版號會遞增
Minor
也是大更新,但是程式可以向下相容,這個版號會遞增
Build
通常是一些小更新,例如:修正 Bug,這個版號會遞增
PS.這個欄位也有人用更新日期代表
Revision
通常是內部版本,或修正安全性漏洞,這個版號會遞增
<Target Name="ExecuteBatAfterPublish" AfterTargets="AfterPublish">
<Exec Command="C:\Batch\WinToUbuntu.bat" WorkingDirectory="$(publishUrl)" />
</Target>
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
#region Register the MiniProfiler services
services.AddMiniProfiler(options => options.RouteBasePath = "/profiler");
#endregion Register the MiniProfiler services
....
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseResponseCompression();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
#region Register the MiniProfiler
app.UseMiniProfiler();
#endregion Register the MiniProfiler
}
[HttpGet]
public IEnumerable Get()
{
string url1 = string.Empty;
string url2 = string.Empty;
using (MiniProfiler.Current.Step("Get方法"))
{
using (MiniProfiler.Current.Step("準備數據"))
{
using (MiniProfiler.Current.CustomTiming("SQL", "SELECT * FROM Config"))
{
// 模擬一個SQL查詢
Thread.Sleep(500);
url1 = "https://www.baidu.com";
url2 = "https://www.sina.com.cn/";
}
}
using (MiniProfiler.Current.Step("使用從數據庫中查詢的數據,進行Http請求"))
{
using (MiniProfiler.Current.CustomTiming("HTTP", "GET " + url1))
{
var client = new WebClient();
var reply = client.DownloadString(url1);
}
using (MiniProfiler.Current.CustomTiming("HTTP", "GET " + url2))
{
var client = new WebClient();
var reply = client.DownloadString(url2);
}
}
}
return new string[] { "value1", "value2" };
}
using NSwag.AspNetCore;
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
#region Register the Swagger services
// Register the Swagger services
services.AddSwaggerDocument();
#endregion Register the Swagger services
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
#region Register the Swagger generator and the Swagger UI middlewares
// Register the Swagger generator and the Swagger UI middlewares
app.UseSwagger();
app.UseSwaggerUi3();
#endregion Register the Swagger generator and the Swagger UI middlewares
app.UseMvc(routes =>
{
routes.MapRoute(name: "default", template: "{controller}/{action}/{id?}");
});
}
/// <summary>
/// 簡單的 Controller 範例
/// </summary>
/// <summary>
/// 異步函式
/// </summary>
static async void AsyncFun()
{
// 裡面要有 await 關鍵字
// await 後面要接回傳 Task 的函式
// 因為回傳 Task 簡稱他為異步任務
List<formatter> f_ = new List<formatter>{
new Formatter("「異步任務」", Color.Red)};
Print("執行 {0} 『開始』", Color.Yellow, f_.ToArray());
bool ret_ = await DelayFun();
Print("執行 {0} 『結束』", Color.Yellow, f_.ToArray());
}
/// <summary>
/// 異步任務
/// </summary>
/// <returns>true</returns>
static Task<bool> DelayFun()
{
return Task.Run(() =>
{
List<Formatter> f_ = new List<Formatter>{
new Formatter("等待五秒", Color.YellowGreen)};
Print("{0} 開始", Color.Red, f_.ToArray());
Thread.Sleep(5000);
Print("{0} 結束", Color.Red, f_.ToArray());
return true;
});
}
static void Main(string[] args)
{
....
// 異步函式
List<Formatter> f0_ = new List<Formatter>{
new Formatter("「異步函式」", Color.Red)};
Print("執行 {0} 開始", Color.Green, f0_.ToArray());
AsyncFun();
Print("執行 {0} 結束", Color.Green, f0_.ToArray());
....
}
public class CommitID
{
private static string EnvironmentVariable
{
get
{
string sPath = Environment.GetEnvironmentVariable("Path");
var result = sPath.Split(';');
for (int i = 0; i < result.Length; i++)
{
if (result[i].Contains(@"Git\cmd"))
{
sPath = result[i];
}
}
return sPath;
}
}
public static void GetCommitID()
{
string gitPath = System.IO.Path.Combine(EnvironmentVariable, "git.exe");
Console.WriteLine($"環境路徑:{gitPath}");
Process p = new Process();
p.StartInfo.FileName = gitPath;
p.StartInfo.Arguments = "rev-parse HEAD";
p.StartInfo.CreateNoWindow = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.OutputDataReceived += OnOutputDataReceived;
p.Start();
p.BeginOutputReadLine();
p.WaitForExit();
}
private static void OnOutputDataReceived(object sender, DataReceivedEventArgs e)
{
if (e != null && !string.IsNullOrEmpty(e.Data))
{
ID = e.Data;
Console.WriteLine(e.Data);
}
}
public static string ID { get; set; } = "";
}
<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ import namespace="System.IO" #>
<#@ assembly name="$(SolutionDir)\CommitID\bin\Debug\netstandard2.0\MyLibrary.Git.dll" #>
<#@ import namespace="MyLibrary.Git" #>
<#@ assembly name="C:\Program Files\dotnet\sdk\2.1.700-preview-009597\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\netstandard.dll" #>
<#@ output extension=".cs" #>
<#
int major = 0;
int minor = 0;
int build = 0;
int revision = 0;
try
{
using(var f = File.OpenText(Host.ResolvePath("SharedInfo.cs")))
{
// 取值做 +1 使用
//string maj = f.ReadLine().Replace("//","");
//string min = f.ReadLine().Replace("//","");
//string b = f.ReadLine().Replace("//","");
//string r = f.ReadLine().Replace("//","");
// 轉成日期
string maj = DateTime.Now.Year.ToString();
string min = DateTime.Now.Month.ToString();
string b = DateTime.Now.Day.ToString();
string r = DateTime.Now.Minute.ToString() + "0" + DateTime.Now.Second.ToString();
major = int.Parse(maj);
minor = int.Parse(min);
build = int.Parse(b);
revision = int.Parse(r) + 1;
}
}
catch
{
major = 1;
minor = 0;
build = 0;
revision = 255;
}
// 呼叫自己個函式庫
CommitID.GetCommitID();
string gitver = CommitID.ID;
#>
//<#= major #>
//<#= minor #>
//<#= build #>
//<#= revision #>
//<#= gitver #>
//
// This code was generated by a tool. Any changes made manually will be lost
// the next time this code is regenerated.
//
using System.Reflection;
[assembly: AssemblyFileVersion("<#= major #>.<#= minor #>.<#= build #>.<#= revision #>")]
[assembly: AssemblyTitle("<#= gitver #>")]
<#@ assembly name="$(SolutionDir)\CommitID\bin\Debug\netstandard2.0\MyLibrary.Git.dll" #>
<#@ import namespace="MyLibrary.Git" #>
<#@ assembly name="C:\Program Files\dotnet\sdk\2.1.700-preview-009597\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\netstandard.dll" #>
參考文章: 覺得 Google 的 Blogger 不太順手?透過 HTML 的 iframe 移花接木 HackMD