从project.json获取版本的价值

时间:2016-04-14 21:16:54

标签: c# dnx

在使用“project.json”文件的DNX应用程序中,有没有办法从“project.json”文件中读取“version”属性的值?

我正在编写一个向当前HTTP响应写入内容的库,我想在那里显示该应用程序的版本。

高度赞赏任何有关如何做到这一点的帮助。

3 个答案:

答案 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(", "));