我正在开发一个使用asp.net核心的网站。
我发布它Visual Studio
或/和VSTS
。在网页上显示内部版本
我想显示一些关于它在网页上的构建的信息。
(类似于rev 2016.9.20.4002
)
我该怎么做?
我正在开发一个使用asp.net核心的网站。
我发布它Visual Studio
或/和VSTS
。在网页上显示内部版本
我想显示一些关于它在网页上的构建的信息。
(类似于rev 2016.9.20.4002
)
我该怎么做?
貌似ApplicationEnvironment类是你所需要的:
var appEnv = new Microsoft.Extensions.PlatformAbstractions.ApplicationEnvironment();
string version = appEnv.ApplicationVersion;
而且 How can I auto-increment an MVC 6 version number?可能也吸引您,但请记住,这IApplicationEnvironment
已被删除。
你的意思是这样的:
在project.json:
{
"title": "Your Application name",
"version": "2016.9.20.4002",
"copyright": "Your Company 2016",
"description": "Awesome ASP.Net Core Application",
"dependencies": {
//rest of project.json
然后,您可以在您的视图模型或模型创建一个属性,如:
public static string Version
{
get
{
var assembly = Assembly.GetExecutingAssembly();
var fileVersion = GetCustomAttribute<AssemblyFileVersionAttribute>(assembly);
return fileVersion?.Version;
}
}
在您的看法:
@model Namespace.CustomViewModel
<!--Other HTML Code-->
<span id="applicationVersion">@CustomViewModel.Version</span>
这是一个好主意,但我必须更改版本。我希望它可以自动完成。 – qin
就像其他选项一样,您可以读取程序集创建的时间并以版本格式显示它。每次组装重建时,该值都会更改为创建时的时间。
(改编自this answer对于.NET核心)
public static class AppInfo
{
private static Lazy<string> buildVersion =
new Lazy<string>(() => GetBuildVersion(Assembly.GetEntryAssembly()));
public static string BuildVersion { get; } = buildVersion.Value;
private static string GetBuildVersion(Assembly assembly)
{
var filePath = assembly.Location;
const int c_PeHeaderOffset = 60;
const int c_LinkerTimestampOffset = 8;
var buffer = new byte[2048];
using (var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
stream.Read(buffer, 0, 2048);
var offset = BitConverter.ToInt32(buffer, c_PeHeaderOffset);
var secondsSince1970 = BitConverter.ToInt32(buffer, offset + c_LinkerTimestampOffset);
var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
var linkTimeUtc = epoch.AddSeconds(secondsSince1970);
var localTime = TimeZoneInfo.ConvertTime(linkTimeUtc, TimeZoneInfo.Local);
var minutesFromMidnight = localTime.Minute + localTime.Hour * 60;
return localTime.ToString("yyyy.M.dd.") + minutesFromMidnight;
}
}
然后只是引用它在剃刀为:
@AppInfo.BuildVersion
您可以通过版本号进行跟踪。
步骤显示版本号到您的网站:
{ "ConnectionStrings": { "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=aspnet-WebApplication1-ab933d83-8f4b-4024-9f3c-1aef5339a8f3;Trusted_Connection=True;MultipleActiveResultSets=true" }, "Logging": { "IncludeScopes": false, "LogLevel": { "Default": "Debug", "System": "Information", "Microsoft": "Information" } }, "CodeVersion": { "Num": "#{MyBuildNumber}#" } }
经过一天的研究,终于找到/创建了一个更好的选择,而不是使用Marketplace中的任何随机应用程序(Replace Token)。
我说的选项已经在VSTS,Azure CLI任务中可用。
这里是STPES:
az webapp config appsettings set -n iCoreTestApi -g ArchitectsSandbox -s Dev --settings BUILD_NUMBER=$(Build.BuildNumber)
命令解释:
在成功完成部署后,您将对新构建进行排队,您可以看到Azure上的应用设置部分已更新为新的BUILD_NUMBER。
让我知道你是否仍然有任何问题。
可以相关http://stackoverflow.com/questions/39196090/info-page-about-asp-net-core/39196229#39196229 – Set
谢谢,但我只需要一个版本号发布,而不是建立。 'app.UseRuntimeInfoPage()'只适合开发时间。 – qin
“rev 2016.9.20.4002”是由VSTS生成的内部版本号吗? –