C# 从project.json中获取版本值

C# 从project.json中获取版本值,c#,dnx,C#,Dnx,在使用“project.json”文件的DNX应用程序中,是否有方法从“project.json”文件中读取“version”属性的值 我正在编写一个库,它向当前HTTP响应写入一些内容,我想在其中显示应用程序的版本 非常感谢您提供有关如何完成此操作的任何帮助。如果您在构建期间(或以任何其他方式)设置版本属性,您可以这样做: using System; using System.Reflection; [assembly:AssemblyVersionAttribute("1.2.3")]

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

我正在编写一个库,它向当前HTTP响应写入一些内容,我想在其中显示应用程序的版本


非常感谢您提供有关如何完成此操作的任何帮助。

如果您在构建期间(或以任何其他方式)设置版本属性,您可以这样做:

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}");
        }
    }
}

我使用新的dotnet cli完成了这项工作,它正在取代dnx,但它也应该与dnx
dnxcore50
配合使用

您正在编写类库还是ASP.NET应用程序

如果是类库,则可以将版本字符串复制到资源文件中,在运行时读入该文件以获取版本。使用类库很难做到这一点,因为你没有初创公司和IoC的美感


如果是ASP.NET,则只需在appsettings.json配置中添加一个版本(或用于存储设置的自定义json文件),并在启动时读取该版本:

如果在web应用程序中运行,则可以使用多种方法,而不是在类库中运行。 第一种方式自定义属性数据(应检查属性是否可用):

第二条路

        var name = this.GetType().AssemblyQualifiedName;
        name = name.Substring(name.IndexOf("Version=") + 8);
        var verion = name.Substring(0, name.IndexOf(", "));

如果发布应用程序,project.json将不存在,因此您无法在运行时读取它。也许在构建期间设置assembly version属性,并在应用程序运行时返回该属性?我想这在DNX EVNIR环境中不起作用。无法识别获取条目程序集。至少不在DNX内核中,而我的应用程序确实需要支持它。这可能取决于你是如何做到的。也许您可以使用GetExecutionGassembly?在DNX项目中,“程序集”下没有任何内容。因此,没有调用程序集,也没有执行程序集。还有别的解决办法吗?
        var name = this.GetType().AssemblyQualifiedName;
        name = name.Substring(name.IndexOf("Version=") + 8);
        var verion = name.Substring(0, name.IndexOf(", "));