.NET Native 枚举类型的 GetValues 方法问题解决

10

我正在尝试使我的应用程序(适用于 Windows 10)在 .NET Native 下工作。

我遇到了以下问题:Enum.GetValues 在运行时失败,提示缺少元数据。我已经为这个问题简化了测试案例(实际代码看起来不同)。在可移植库中,我有:

public enum enumValues
{        
    A1,     
    B1,        
    C1,
}

public class fff
{
    public static object GetClass2Value()
    {
        return enumValues.B1;
    }
}

在我的通用 Windows 应用程序中,我调用了以下代码:

Array aaa = Enum.GetValues(fff.GetClass2Value().GetType());

我收到了以下异常:

附加信息:'enumlibportable.enumValues[]' 缺少元数据。

问题在于我不知道该在Default.rd.xml文件中添加什么内容。我尝试使用微软工具http://go.microsoft.com/fwlink/?LinkID=392859添加不同的rd字符串(如枚举子类型,enumValues类,enumValues []等),但都没有成功。

更新: 我知道以下代码对于我的测试案例Enum.GetValues(typeof(enumValue))是有效的,但我不能在我的真实项目中使用它,因为我不知道实际枚举类型是什么。


我假设真正的代码是子类化/接口的情况?你能详细解释一下吗? - Nyerguds
好吧,解释我的真正项目太长了,这就是为什么我花了很多时间找出问题的原因并准备样品。我已经很好地描述了我的问题。问题是优化会删除枚举元数据,因为在应用程序中没有明确引用它。我需要告诉编译器不要删除此元数据。 - Access Denied
你不能使返回类型泛型吗? - Herdo
2个回答

5

对我来说没有意义,但以下RD字符串适用于我的测试用例:

<Type Name="enumlibportable.enumValues[]" Browse="Required All"/>

有一个有用的技巧是使用过度慷慨的指令:<Assembly Name="*Application*" Dynamic="Required All" />。这将使应用程序中的所有类型都具有足够的信息,以便对该类型进行反射操作。它非常有效,甚至在空白的UWP模板下也包含在Properties\Default.rd.xml中!希望对你有所帮助。 - MattWhilden
我在我的项目中发现了这行代码:<Assembly Name="*Application*" Dynamic="Required All" />,但它在我的情况下无法工作。我怀疑这是.NET本地化中的一个错误。 - Access Denied

0

也许你可以试试这个,可能会对你有帮助

Array aaa = (enumValues) Enum.Parse(typeof(enumValues), fff.GetClass2Value());

在我的实际项目中,我不知道确切的类型,它可能是不同的枚举类型,我不能使用这种方法,不幸的是。而且我认为这不是一个适当的解决方案。如果我添加一些新的枚举,我将不得不为每个枚举添加此解决方法。这应该通过运行时定义来完成。 - Access Denied

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接