none
如何获取WPF项目(使用.Net 5框架)中“属性”→“打包”页面中的各项信息 RRS feed

  • 问题

  • 各位专家:

    本人对新框架.Net 5了解不多,相比于.Net Framework 4.8中的wpf项目,“打包”页面中的的信息比“程序集信息”页面多得多。今天在创建一个WPF项目(使用.Net 5框架)时,需要得到项目“属性”→“打包”页面中的数项信息,但是我用之前.Net Framework 4.8中使用的反射的读取方法,无法获得,我很困惑。

    我使用先前常用的反射方法,已经可以获得部分字段数据:

    using System.Reflection;//Assembly
    private void Bt_Action_New_Click(object sender, RoutedEventArgs e)
    {
        Assembly assembly = Assembly.GetExecutingAssembly();
               
        var assemblyVersion = assembly.GetName().Version;//程序集版本(A)
                var fileVersion = assembly.GetCustomAttribute<AssemblyFileVersionAttribute>().Version;//程序集文件版本(F)
        var version = assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>().InformationalVersion;//包版本(V)
        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 += $"{assemblyVersion}\n";
    }

    但是 “包ID(I)”、 “作者(A)”、 “标记(T)” 这3个字段的值,我使用C#代码实在是无能为力。

    恳请哪位大神给出读取“打包”页面中“包ID(I)”、 “作者(A)”、 “标记(T)” 这3个项目值的读取方法的C#代码。





    • 已编辑 wxysy 2021年3月16日 3:16 细化问题
    2021年3月15日 16:37

答案

  • 你好,

    在Package Tab 中设置的内容其实可以在项目的.csproj 中的PropertyGroup中找到,它也就是pack-target 所包含的内容。你可以使用以下代码去获取 Package 的 Tab内容。

       var name3 = XDocument.Load(@"E:.....\WpfApp1.csproj").Descendants("PackageTags").Select(i => i.Value).First();
    

    谢谢

    Daisy Tian


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 wxysy 2021年3月18日 1:30
    2021年3月17日 3:06

全部回复

  • 你好,

    在Package Tab 中设置的内容其实可以在项目的.csproj 中的PropertyGroup中找到,它也就是pack-target 所包含的内容。你可以使用以下代码去获取 Package 的 Tab内容。

       var name3 = XDocument.Load(@"E:.....\WpfApp1.csproj").Descendants("PackageTags").Select(i => i.Value).First();
    

    谢谢

    Daisy Tian


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 wxysy 2021年3月18日 1:30
    2021年3月17日 3:06
  • 你好,

    在Package Tab 中设置的内容其实可以在项目的.csproj 中的PropertyGroup中找到,它也就是pack-target 所包含的内容。你可以使用以下代码去获取 Package 的 Tab内容。

       var name3 = XDocument.Load(@"E:.....\WpfApp1.csproj").Descendants("PackageTags").Select(i => i.Value).First();

    谢谢

    Daisy Tian


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    感谢回答,您的解答很有效,确实找到了这三个项目的值。

    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文件。

    而我这三个值是要在程序内使用的,我如何在编译好的程序内找到这三个值呢?





    • 已编辑 wxysy 2021年3月18日 1:41 问题细化
    2021年3月18日 1:27