.NET 6发布版本下如何获取项目完整属性(产品、版本等)
发布版本下获取完整项目属性的解决方法
问题场景
通过Visual Studio的「生成→发布」构建发布版本时,原代码无法正常读取项目的公司、产品、版本等属性:
var assembly = Assembly.GetExecutingAssembly(); var version = FileVersionInfo.GetVersionInfo(assembly.Location);
该代码因无法访问Assembly失效;仅能通过以下代码获取版本号,但无法获取其他扩展属性:
GetType().Assembly.GetName().Version.ToString();
仅发布版本出现此问题,调试或直接运行代码时一切正常。
可行解决方案
1. 通过程序集特性读取完整属性
利用GetType().Assembly获取当前程序集,再通过对应特性类读取各类元数据属性,这是最可靠的方式:
using System.Reflection; var assembly = GetType().Assembly; // 读取版本号 var version = assembly.GetName().Version?.ToString(); // 读取公司名称 var companyAttr = assembly.GetCustomAttribute<AssemblyCompanyAttribute>(); var companyName = companyAttr?.Company; // 读取产品名称 var productAttr = assembly.GetCustomAttribute<AssemblyProductAttribute>(); var productName = productAttr?.Product; // 读取版权信息 var copyrightAttr = assembly.GetCustomAttribute<AssemblyCopyrightAttribute>(); var copyright = copyrightAttr?.Copyright; // 读取项目描述 var descAttr = assembly.GetCustomAttribute<AssemblyDescriptionAttribute>(); var description = descAttr?.Description;
2. 检查发布配置确保属性不丢失
需要确认发布设置未剥离程序集元数据:
- 右键项目 →「属性」→「应用程序」→「程序集信息」:确认已填写所有需要的属性(公司、产品、版本等),确保信息完整。
- 右键项目 →「属性」→「发布」→「设置」:在「文件发布选项」中,若勾选了「优化代码」可尝试取消勾选——部分优化策略会移除非必要的元数据属性。
- 对于.NET Core/.NET 5+项目,检查
.csproj文件中的配置,确保自动生成程序集信息:<PropertyGroup> <GenerateAssemblyInfo>true</GenerateAssemblyInfo> </PropertyGroup>
3. 备选:通过进程模块路径获取FileVersionInfo
如果发布后能正常访问程序集文件路径,可通过当前进程主模块路径读取FileVersionInfo:
using System.Diagnostics; var mainModulePath = Process.GetCurrentProcess().MainModule?.FileName; if (!string.IsNullOrEmpty(mainModulePath)) { var fileInfo = FileVersionInfo.GetVersionInfo(mainModulePath); var company = fileInfo.CompanyName; var product = fileInfo.ProductName; var fullVersion = fileInfo.ProductVersion; }
内容的提问来源于stack exchange,提问作者Fedor Yudin
相关产品推荐
相关产品推荐

