Type.GetProperties() 在发布版中不起作用

Type.GetProperties() doesn't work in Release

我正在尝试使用反射在 C# 中获取 FontWeights class 的属性。

var properties = typeof(FontWeights).GetProperties();
var dialog = new MessageDialog("Number of weights: " + properties.Length);
await dialog.ShowAsync();

当使用 Debug 配置构建时,以上内容按预期工作。但是,当使用 Release 时,找不到任何属性。

为什么会这样?有解决办法吗?

这是一个 UWP 应用程序。

It's an UWP app.

在发布版本中,您的应用程序是使用 .NET Native 编译的。这是有意为之的,它确保您可以测试应用程序在用户计算机上 运行 的方式。 .NET Native 并不是一帆风顺的,它积极地从最终图像中消除类型以获得尽可能小的二进制文件。这在通常需要抖动才能正常工作的代码上有明显的优势。特别是反射代码会流血,就像这段代码。

您需要帮助并告诉工具链将 FontWeights 类型包含到最终图像中。打开项目的属性节点并双击 Default.rd.xml。添加:

   <Type Name="Windows.UI.Text.FontWeights" Dynamic="Required All" />

重建,你会发现现在一切都很好。