在使用“project.json”文件的DNX应用程序中,有没有办法从“project.json”文件中读取“version”属性的值?
我正在编写一个向当前HTTP响应写入内容的库,我想在那里显示该应用程序的版本。
高度赞赏任何有关如何做到这一点的帮助。
答案 0 :(得分:1)
如果您在构建期间(或以任何其他方式)设置版本属性,则可以这样做:
using System;
using System.Reflection;
[assembly:AssemblyVersionAttribute("1.2.3")]
namespace Test
{
class Program
{
public static void Main()
{
var assembly = typeof(Program).GetTypeInfo().Assembly;
var name = assembly.GetName();
Console.WriteLine($"{name.Name}: {name.Version}");
}
}
}
我是使用替换dnx的新dotnet cli完成的,但它也应该与dnx dnxcore50
一起使用。
答案 1 :(得分:0)
您在编写类库还是ASP.NET应用程序?
如果是类库,则可以将版本字符串复制到在运行时读取的资源文件中以获取版本。由于你没有获得Startup和IoC的美感,所以很难用类库做这类事情。
如果是ASP.NET,那么只需在appsettings.json配置中添加一个版本(或者自定义json文件来存储设置)并在启动时读取它:http://docs.asp.net/en/latest/fundamentals/configuration.html
答案 2 :(得分:0)
如果您在Web应用程序中运行而不是类库,则可以采用多种方式执行此操作。 第一种方式自定义属性数据(应检查属性是否可用):
this.GetType().Assembly.GetCustomAttributesData()
.First(x => x.AttributeType.FullName == "System.Reflection.AssemblyInformationalVersionAttribute")
.ConstructorArguments[0];
第二种方式
var name = this.GetType().AssemblyQualifiedName;
name = name.Substring(name.IndexOf("Version=") + 8);
var verion = name.Substring(0, name.IndexOf(", "));