如何获取在net 6中发布的项目数据(产品、版本)

问题描述 投票:0回答:1

如果项目被构建为已发布版本(在 VS 中:构建 -> 发布选择),则很难获取项目数据(产品、版本)。 这个方法行不通

var assembly = Assembly.GetExecutingAssembly();
var version = FileVersionInfo.GetVersionInfo(assembly.Location);

因为无法访问Assembly。 我找到了解决方案

GetType().Assembly.GetName().Version.ToString();

但是这样我就可以获得版本而不是其他项目属性(公司、产品)。 如何获取所有项目数据?也许需要一些配置发布?

c# asp.net-core version .net-6.0 publish
1个回答
0
投票

但是这样我就可以得到版本而不是其他项目属性 (公司、产品)。如何获取所有项目数据?也许需要一些 配置发布?

嗯,根据您的描述和场景,您可能听说过Reflection。在 Reflection 中,您会看到 AssemblyName 类,如下所示:

enter image description here

使用

AssemblyName class
您可以获得
Company
Version
Product Name
以及通常在装配中可用的更多信息。

如果您导航到项目属性,您将看到以下选项卡:

enter image description here

所以,您可以使用

AssemblyName
在这里获取所有信息。

让我们看一下实践中的例子:

为了获得

Company
Version
Product Name
,我将使用接口和服务作为单例,然后在program.cs文件中作为服务注入。

班级:

公共类项目信息 { 公共字符串?产品名称 { 获取;放; } 公共字符串?版本{获取;放; } 公共字符串?公司{得到;放; } }

注意: 您可以从程序集中添加所需的任何属性。

接口:

public interface IAssemblyInfoService
{
    string GetProductName();
    string GetVersion();
    string GetCompany();
}

实施:

public class AssemblyInfoService : IAssemblyInfoService
{
    private readonly Assembly _assembly;

    public AssemblyInfoService()
    {
        _assembly = Assembly.GetEntryAssembly();
    }

    public string GetProductName()
    {
        return _assembly.GetName().Name;
    }

    public string GetVersion()
    {
        return _assembly.GetName().Version.ToString();
    }

    public string GetCompany()
    {
        var attribute = (AssemblyCompanyAttribute)Attribute.GetCustomAttribute(_assembly, typeof(AssemblyCompanyAttribute));
        return attribute != null ? attribute.Company : "Unknown";
    }
}

程序.cs:

builder.Services.AddSingleton<IAssemblyInfoService, AssemblyInfoService>();

拉取信息:

private readonly IAssemblyInfoService _assemblyInfoService;

public YourControllerOrService(IAssemblyInfoService assemblyInfoService)
{
    _assemblyInfoService = assemblyInfoService;
}

public List<string> InspectionType { get; private set; }

public void OnGet()
{
    var productName = _assemblyInfoService.GetProductName();
    var version = _assemblyInfoService.GetVersion();
    var company = _assemblyInfoService.GetCompany();
}

输出: enter image description here enter image description here enter image description here

enter image description here

注意:请参考此官方文档查看您可以提取哪些信息或您需要什么。

© www.soinside.com 2019 - 2024. All rights reserved.