2015-11-11 1 views
0

У меня есть код UWP, который работает с типом System.Reflection.Module. Когда приложение скомпилировано в режиме DEBUG, все в порядке, и я могу получить пользовательские атрибуты для модуля. Но когда я переключаюсь в режим RELEASE и компилирую приложение с .NET Native, все эти атрибуты исчезают.Метод GetCustomAttributes (System.Reflection.Module) ничего не возвращает, если приложение скомпилировано с .NET Native

ответ

4

После выполнения приложения через Native цепочку инструментов .Net (ilc.exe) вы заметите, что ваши исполняемые файлы приложений не отображаются, как вы бы наивно ожидать. Это связано с тем, что весь ваш .Net-код (включая часть .Net Framework, требуемого вашим приложением) был сложен в одну двоичную .dll. Мы делаем это, потому что многие шаги оптимизации работают намного лучше, когда компилятор может просматривать все состояние вашей программы. Это также может ускорить ваше время начала, потому что найти кучу разных файлов на диске не на горячем пути.

Учитывая все вышесказанное, необходимо было разработать политику атрибутов Assembly. В конце концов, было легче избавиться от поддержки, чем понять способ заставить конфликтующие вещи хорошо сцепляться.

Если у вас есть сценарий, который возможен только через эти атрибуты, мы хотели бы узнать больше об этом.

+0

У меня был код, основанный на этом атрибуте. Теперь я использую другой подход. Спасибо! – ger18s

+0

@Matt: Можете ли вы прояснить этот ответ? То есть можете ли вы подтвердить, что это _only_ для атрибутов уровня сборки, и что атрибуты типов и членов по-прежнему поддерживаются и работают должным образом? –

+0

Мы ожидаем, что все остальные атрибуты будут работать как обычно. Мы сохраняем полную информацию о метаданных о том, где они применяются, генерируют код для любых конструкторов, которые они могут иметь и т. Д. Как всегда, если у вас есть какие-либо проблемы, пожалуйста, запиши мне почту на [email protected] Рад был помочь. –

1

Пожалуйста, проверьте эти ссылки:

Reflection and .NET Native

NET Native Deep Dive: Help! I Hit a MissingMetadataException

Вы, вероятно, может решить эту проблему путем обновления .rd.xml (время выполнения директивы файла конфигурации), как описано в предыдущей статье.

И для информации:

Runtime Directives (rd.xml) Configuration File Reference

+0

Проблема заключается в том, что в то же время я могу получить пользовательские атрибуты для сборки (без каких-либо изменений). Таким образом, [module: MyAttribute] не работает, но [сборка: MyAttribute] работает отлично. – ger18s

Смежные вопросы