Исключения среды выполнения в собственных приложениях .NET

Очень важно выполнять тестирование сборок выпуска приложения универсальной платформы Windows на их целевых платформах, поскольку конфигурации отладки и выпуска совершенно различны. По умолчанию конфигурация отладки использует для компиляции приложения среду выполнения .NET Core, но конфигурация выпуска использует для компиляции приложения в машинный код среду выполнения .NET Native.

Важно!

Сведения об устранении исключений MissingMetadataException, MissingInteropDataException и MissingRuntimeArtifactException, которые могут возникнуть при тестировании версий выпуска приложения, см. в разделе "Шаг 4. Устранение отсутствующих метаданных вручную: раздела начало работы, а также отражение и .NET Native и Справочник по файлу конфигурации директив среды выполнения (rd.xml).

Отладочные и выпускные сборки

Когда отладочная сборка выполняется в среде выполнения .NET Core, она не компилируется в машинный код. Это делает все службы, обычно предоставляемые средой выполнения, доступными вашему приложению.

С другой стороны, выпускная сборка компилируется в машинный код для целевых платформ, при этом удаляется большинство зависимостей от внешних сред выполнения и библиотек и выполняется серьезная оптимизация кода для достижения максимальной производительности.

При отладке выпускных сборок, которые компилируются с помощью .NET Native, происходит следующее.

  • Вы используете модуль отладки .NET Native, который отличается от обычных средств отладки .NET.

  • Размер исполняемого файла максимально уменьшается. Один из способов, которым .NET Native уменьшает размер исполняемого файла, состоит в значительном сокращении сообщений об исключениях времени выполнения. Это более подробно рассматривается в разделе Runtime exception messages .

  • Код сильно оптимизируется. Это означает, что везде, где это возможно, используется встраивание. (Встраивание перемещает код из внешних подпрограмм в вызывающую подпрограмму.) Тот факт, что .NET Native предоставляет специализированную среду выполнения и реализует агрессивную встраивание, влияет на стек вызовов, отображаемый при отладке. Дополнительные сведения см. в разделе Runtime call stack .

Примечание

Вы можете управлять тем, будут ли отладочные и выпускные сборки компилироваться с помощью цепочки инструментов .NET Native, устанавливая или снимая флажок Компилировать с использованием цепочки инструментов машинного кода .NET . Однако Microsoft Store всегда компилирует рабочую версию приложения с .NET Native цепочкой инструментов.

Runtime exception messages

Чтобы свести к минимуму размер исполняемого файла приложения, .NET Native не включает полный текст сообщений об исключениях. В результате исключения среды выполнения, возникающие в выпускной сборке, могут не отображать полный текст сообщений об исключениях. Вместо этого текст может содержать подстроку со ссылкой на дополнительные сведения. Например, сведения об исключении могут выглядеть следующим образом:

Exception thrown: '$16_System.AggregateException' in Unknown Module.

Additional information: AggregateException_ctor_DefaultMessage

If there is a handler for this exception, the program may be safely continued.

Если требуется полное сообщение об исключении, запустите отладочную сборку. Например, предыдущие сведения об исключении из сборки выпуска могут выглядеть в отладочной сборке следующим образом:

Exception thrown: 'System.AggregateException' in NativeApp.exe.

Additional information: Value does not fall within the expected range.

Runtime call stack

Из-за встраивание и другие оптимизации стек вызовов, отображаемый приложением, скомпилированным .NET Native цепочкой инструментов, может не помочь вам четко определить путь к исключению среды выполнения.

Чтобы получить полный стек, запустите отладочную сборку.

См. также раздел