Элемент <NetFx40_PInvokeStackResilience>

Указывает, будет ли среда выполнения автоматически исправлять неверные объявления вызова неуправляемого кода за счет более медленных переходов между управляемым и неуправляемым кодом.

<NetFx40_PInvokeStackResilience  enabled="1|0"/>

Атрибуты и элементы

В следующих разделах описаны атрибуты, дочерние и родительские элементы.

Атрибуты

Атрибут

Описание

enabled

Обязательный атрибут.

Указывает, будет ли среда выполнения определять неверные объявления вызова неуправляемого кода и автоматически исправлять стек во время выполнения на 32-разрядных платформах.

Атрибут enabled

Значение

Описание

0

Среда выполнения использует более быструю архитектуру маршалинга взаимодействия, появившуюся в .NET Framework 4, которая не обнаруживает и не исправляет неверные объявления вызова неуправляемого кода. Это значение по умолчанию.

1

Среда выполнения использует медленнее переходы, которые обнаруживают и исправляют неверные объявления вызова неуправляемого кода.

Дочерние элементы

Отсутствует.

Родительские элементы

Элемент

Описание

configuration

Корневой элемент в любом файле конфигурации, используемом средой CLR и приложениями платформы .NET Framework.

runtime

Содержит сведения о параметрах инициализации среды выполнения.

Заметки

Этот элемент позволяет быстрее реализовывать маршалинг взаимодействия для обеспечения устойчивости среды выполнения к неверным объявлениям вызова неуправляемого кода.

Начиная с .NET Framework 4 архитектура упрощенного маршалинга взаимодействия обеспечивает значительное улучшение производительности для переходов из управляемого кода в неуправляемый код. В более ранних версиях .NET Framework уровень маршалинга обнаруживал неверные объявления вызова неуправляемого кода на 32-разрядных платформах и автоматически исправлял стек. Новая архитектура маршалинга устраняет этот шаг. В результате переходы являются очень быстрыми, но неверные объявления вызова неуправляемого кода могут вызвать сбой программы.

Чтобы было проще обнаружить неправильные объявления во время разработки, были улучшены функции отладки Visual Studio. Управляемый помощник по отладке (MDA) PInvokeStackImbalance уведомляет о неправильном объявлении вызова неуправляемого кода при запуске приложения с подключенным отладчиком.

Для сценариев адрес, где приложение использует компоненты, которые не удается повторно компилировать, и которые имеют неправильные объявления вызова неуправляемого кода, можно использовать элемент NetFx40_PInvokeStackResilience. Добавление этого элемента в файл конфигурации приложения с enabled="1" переводит в режим совместимости с поведением более ранних версий .NET Framework за счет замедления переходов. Сборки, которые были скомпилированы для более ранних версий .NET Framework, автоматически переводятся в этот режим совместимости и не нуждаются в этом элементе.

Файл конфигурации

Этот элемент может использоваться только в файле конфигурации приложения.

Пример

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

<configuration>
   <runtime>
      <NetFx40_PInvokeStackResilience enabled="1"/>
   </runtime>
</configuration>

См. также

Ссылки

Схема параметров среды выполнения

pInvokeStackImbalance MDA

Другие ресурсы

Схема файлов конфигурации для .NET Framework