Метод GetCustomAttributes (System.Reflection.Module) ничего не возвращает, если приложение скомпилировано с.NET Native

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

2 ответа

Решение

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

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

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

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

Отражение и.NET Native

NET Native Deep Dive: Помогите! Я ударил MissingMetadataException

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

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

Директивы времени выполнения (rd.xml) Ссылка на файл конфигурации

Другие вопросы по тегам