大家好!
本人对新框架.Net 5了解不多,相比于.Net Framework 4.8中的wpf项目,“打包”页面中的的信息比“程序集信息”页面多得多。今天在创建一个WPF项目(使用.Net 5框架)时,需要得到项目“属性”→“打包”页面中的数项信息,但是我用之前.Net Framework 4.8中使用的反射的读取方法,无法全部获得,我很困惑。
我使用先前常用的反射方法,已经可以获得部分字段数据,主要C#代码如下:
Assembly assembly = Assembly.GetExecutingAssembly(); var version = assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>().InformationalVersion;//包版本(V) var assemblyVersion = assembly.GetName().Version;//程序集版本(A) var fileVersion = assembly.GetCustomAttribute<AssemblyFileVersionAttribute>().Version;//程序集文件版本(F) var company = assembly.GetCustomAttribute<AssemblyCompanyAttribute>().Company;//公司(Y) var copyright = assembly.GetCustomAttribute<AssemblyCopyrightAttribute>().Copyright;//版权(C) var description = assembly.GetCustomAttribute<AssemblyDescriptionAttribute>().Description;//说明(D) var product = assembly.GetCustomAttribute<AssemblyProductAttribute>().Product;//产品(P) tb_Show.Text += $"{fileVersion}\n";//展示
但是 “包ID(I)”、 “作者(A)”、 “标记(T)” 这3个字段的值,我不知道怎么获取。
恳请哪位大神给出读取“打包”页面中“包ID(I)”、 “作者(A)”、 “标记(T)” 这3个项目值的读取方法的C#代码。
经过他人的帮助指点,我了解到在Package Tab 中设置的内容其实可以在项目的.csproj 中的PropertyGroup中找到,它也就是pack-target 所包含的内容。
所以我用下列代码可以找到这三个值:
var name3 = XDocument.Load(@"..\..\..\WpfDotNet5AssemblyInfos.csproj").Descendants("PackageId").Select(i => i.Value).First(); var name4 = XDocument.Load(@"..\..\..\WpfDotNet5AssemblyInfos.csproj").Descendants("Authors").Select(i => i.Value).First(); var name5 = XDocument.Load(@"..\..\..\WpfDotNet5AssemblyInfos.csproj").Descendants("PackageTags").Select(i => i.Value).First();
但是:
.Net 5 WPF项目在编译、打包生成安装文件的时候,并不会打包这个csproj文件。
而我这三个值是要在程序内使用的,我如何在编译好的程序内找到这三个值呢?
不是一个东西,当然无法获取,.Net本身的那个是程序集内的VersionAttribute,代码自然好获取。
我只能告诉你这东西肯定没问题,自己去找一下。
以前拿来干多次不同版本分发修改这个数据实现的,这个东西有点灰。
我也知道它不是一个东西,不在一个类中,能在网上找到解决方法我就不提问了,可实在是找不到啊。╮(╯▽╰)╭