如果项目被构建为已发布版本(在 VS 中:构建 -> 发布选择),则很难获取项目数据(产品、版本)。 这个方法行不通
var assembly = Assembly.GetExecutingAssembly();
var version = FileVersionInfo.GetVersionInfo(assembly.Location);
因为无法访问Assembly。 我找到了解决方案
GetType().Assembly.GetName().Version.ToString();
但是这样我就可以获得版本而不是其他项目属性(公司、产品)。 如何获取所有项目数据?也许需要一些配置发布?
但是这样我就可以得到版本而不是其他项目属性 (公司、产品)。如何获取所有项目数据?也许需要一些 配置发布?
嗯,根据您的描述和场景,您可能听说过Reflection。在 Reflection 中,您会看到 AssemblyName 类,如下所示:
使用
AssemblyName class
您可以获得 Company
、Version
和 Product Name
以及通常在装配中可用的更多信息。
如果您导航到项目属性,您将看到以下选项卡:
所以,您可以使用
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();
}
注意:请参考此官方文档查看您可以提取哪些信息或您需要什么。