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" />
重建,你会发现现在一切都很好。
我正在尝试使用反射在 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" />
重建,你会发现现在一切都很好。