Известные несовместимости обрезки

В этой статье перечислены шаблоны, несовместимые с обрезкой с текущим инструментом.

Сериализаторы на основе отражения

Альтернатива: сериализаторы без Рефлексия ионов.

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

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

Сериализаторов Альтернатива
Newtonsoft.Json Источник создан System.Text.Json
System.Configuration.ConfigurationManager Генератор источника привязки конфигурации
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter Переход от сериализации BinaryFormatter из-за недостатков безопасности и надежности.

Создание кода среды выполнения с помощью JIT

Создание кода среды выполнения через JIT,например, через System.Reflection.Emit несовместимо с обрезкой.

Динамическая загрузка и выполнение сборки

Обрезка и динамическая загрузка сборки — это распространенная проблема для систем, которые поддерживают подключаемые модули или расширения, обычно через API, например LoadFrom(String). Обрезка зависит от просмотра всех сборок во время сборки, поэтому он знает, какой код используется и не может быть обрезаны. Большинство систем, которые поддерживают подключаемые модули, динамически загружают сторонний код, поэтому средству обрезки невозможно определить необходимый код.

Несовместимость платформы Windows

В следующих разделах перечислены известные несовместимости с обрезкой в Windows.

Программирование NET с помощью C++/CLI

Программирование NET с помощью C++/CLI в настоящее время не поддерживает обрезку.

Встроенный маршалинг COM

Альтернатива: оболочки COM

Автоматический маршалинг COM встроен в .NET, начиная с платформы .NET Framework 1.0. Он использует анализ кода времени выполнения для автоматического преобразования собственных COM-объектов и управляемых объектов .NET. К сожалению, анализ обрезки не всегда может предсказать, какой код .NET необходимо сохранить для автоматического маршаллинга COM. Однако если вместо этого используются оболочки COM, анализ обрезки может гарантировать, что весь используемый код будет сохранен правильно.

WPF

Платформа Windows Presentation Foundation (WPF) использует отражение, а некоторые функции сильно зависят от проверки кода во время выполнения. Невозможно обрезать анализ, чтобы сохранить весь необходимый код для приложений WPF. К сожалению, почти никаких приложений WPF не выполняются после обрезки, поэтому поддержка обрезки WPF в настоящее время отключена в пакете SDK для .NET. Сведения о том, как включить обрезку для WPF, см. не удается устранить проблему, совместимую с обрезкой.

Windows Forms

Платформа Windows Forms обеспечивает минимальное использование отражения, но во многом зависит от встроенного маршалинга COM. К сожалению, практически нет приложений Windows Forms без встроенного маршаллинга COM, поэтому поддержка обрезки приложений Windows Forms в настоящее время отключена в пакете SDK для .NET. Сведения о включении обрезки для Windows Forms см. в статье о проблеме с совместимостью WinForms.