Проекты C++/CLI в Visual Studio

.NET 7 включает универсальные математические API, использующие static abstract элементы интерфейса для примитивных типов, таких как Int32. Более ранние версии компилятора C++/CLI несовместимы с такими элементами. Поскольку эти члены используются во многих примитивных типах, ошибки компиляции возникают при ориентировании на net7.0, даже если не использовать универсальные математические возможности напрямую.

Помимо C++/CLI, также возможно, что введение static abstract элементов интерфейса в примитивных System типах приведет к проблемам в других средствах, которые не совместимы с использованием этой новой конструкции языка. Если вы автор инструмента, вам потребуется обновить все инструменты, затронутые этим изменением, чтобы обеспечить использование static abstract элементов интерфейса. Если вам нужна помощь, отправьте проблему в репозитории dotnet/runtime , чтобы запросить руководство.

Предыдущее поведение

Ранее компиляция проектов .NET с помощью C++/CLI не приводила к ошибкам, связанным с элементами примитивных System типов.

Новое поведение

Компиляция net7.0 проекта с помощью C++/CLI в выпуске Visual Studio до версии 17.2 приведет к возникновению многих ошибок, аналогичных этому примеру:

error C2253: 'System.Int32.Parse': pure specifier or abstract override specifier only allowed on virtual function

Кроме обновления, нет способа обойти эту ошибку компилятора. Он создается из-за static abstract элементов интерфейса в примитивных System типах. При обновлении до Visual Studio 2022 версии 17.2 ошибки компиляции больше не возникают.

Неявно реализованные static abstract члены интерфейса можно вызывать, но даже при использовании Visual Studio 2022 версии 17.2 C++/CLI не поддерживает вызов явно реализованных static abstract элементов интерфейса.

Представленная версия

.NET 7

Тип разрушающего изменения

Это изменение может повлиять на совместимость исходного кода .

Причина изменения

.NET 7 содержит новые определения API для универсального набора математических функций. Эти API были представлены в .NET 6 в качестве предварительной версии функции и требуют установки System.Runtime.Experimental пакета для получения доступа. Начиная с .NET 7, эти универсальные математические API включены как встроенные функции.

Чтобы продолжить использование C++/CLI с .NET 7, обновите до Visual Studio 2022 версии 17.2 или более поздней версии. Кроме того, может потребоваться задать набор инструментов платформы версии 143.

Если вы пропустили .NET 7 при обновлении до .NET 8, обновите до Visual Studio 2022 версии 17.8 или более поздней версии и набор инструментов платформы версии 143 или более поздней версии.

Затронутые API

Не применимо

См. также