2016-02-12 4 views
3

Я пытаюсь получить свойства класса FontWeights в C#, используя отражение.Тип.GetProperties() не работает в Release

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

Когда построен с Debug конфигурации, вышеуказанные работы, как и ожидалось. Однако при использовании Release свойства не найдены.

Почему это так? Есть ли способ обойти это?

Это приложение для UWP.

+0

Я думаю, что использование 'BindingFlags' explicite поможет:' typeof (FontWeights) .GetProperties (BindingFlags.Instance | BindingFlags.Public); ' – pwas

+0

@nopeflow По-прежнему возвращает ноль. – holmis83

ответ

8

Это приложение для UWP.

В выпуске Release ваше приложение скомпилировано с .NET Native. Это преднамеренно, это гарантирует, что вы сможете проверить, как приложение будет работать на вашем компьютере пользователя. .NET Native не совсем плавный, он агрессивно устраняет типы из конечного изображения, чтобы получить наименьшие возможные бинарные файлы. У этого есть острые края на коде, который обычно нуждается в джиттере, чтобы работать должным образом. Код отражения, в частности, будет кровоточить, как этот код.

Вам необходимо помочь и сообщить инструментальной цепочке, чтобы включить тип FontWeights в конечное изображение. Откройте узел «Свойства» вашего проекта и дважды щелкните «Default.rd.xml». Add:

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

Восстановить, и вы увидите, что все хорошо.