NET8 NativeAOT:Type.GetProperties() 不适用于某些类型,但适用于其他类型!为什么?

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

我有一个使用 NET8 NativeAOT 成功发布的程序,但 Type.GetProperties() 适用于某些类,其中属性 r 正确返回,但不适用于其他类,它根本不返回任何属性。我不知道为什么,也找不到调试的线索。有人可以给一些提示吗?

它不适用于像这样的简单课程:


    public sealed partial class UILogText(string name = "", string text = "") 
    {
        public string Name { get; set; } = name;
        public string Text { get; set; } = text;

        public override string ToString() => Text;
    }

但对于一些复杂的类效果很好,例如:

 public sealed partial class GatewayInfo : GatewayEntry, IEntryInfo 
    { 
       //39 public properties (note:not fields) ...
    }

我不知道我还能用它做什么。

我知道 NativeAOT 在某些情况下存在反射问题,但这里的问题是它已经适用于某些类。我无法说出上述示例之间的关键区别。

有人可以提示一下这里发生了什么吗?或者有什么线索可以找出来吗?

c# reflection .net-8.0 getproperties native-aot
1个回答
0
投票
[method: DynamicDependency(DynamicallyAccessedMemberTypes.PublicProperties, typeof(UILogText))]
    public sealed partial class UILogText(string name = "", string text = "") 
    {
        public string Name { get; set; } = name;
        public string Text { get; set; } = text;

        public override string ToString() => Text;
    }

根据上面的评论,添加 DynamicDependencyAttribute 解决了我的问题!

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