Подтвердить что ты не робот

Поддержка С++/CLI в .Net Core

Наша структура проекта похожа на

native.dll: - содержит чистый нативный код, написанный на c\С++. Этот native.dll предоставляет некоторые функции, используя * def файл.

Wrapper Library(wrapper.dll compiled with .Net framework v4.0): - Чтобы использовать функциональные возможности native.dll, a Wrapper lib(wrapper.dll) записывается в C++\CLI с помощью :clr\oldsyntax. У этой обертки есть все код Interoperability и Marshalling.

Application(Console App v4.0) использует wrapper.dll для использования функциональности на native.dll.

Теперь этот проект должен выполняться в .Net Core. Это означает, что у нас будет .Net Core application, который будет reference wrapper.dll, который, в свою очередь, будет ссылаться native.dll.

Я знаю, что это не будет работать напрямую. Но проблема в поддерживает ли .NET Core (CoreCLR) С++\CLI (clr\oldsyntax) среда выполнения ?

Если нет, какие могут быть возможные решения для этого приложения?

4b9b3361

Ответ 1

whether.Net Core(CoreCLR) supports C++\CLI (clr\oldsyntax) runtime environment?

Насколько я знаю, не планируется поддерживать C++/CLI с .NET Core.

Если нет, какие могут быть возможные решения для этого приложения?

Вы можете (должны) предоставить C API. Mono e. грамм. поддерживает P/Invoke и .NET Core также поддерживает P/Invoke (см. также этот вопрос о переполнении стека и этот связанный с DllMap тикет).

Ответ 2

Команда .net Core обязуется (сейчас?) поддерживать C++/CLI только для Windows.

Намерением было поставить его для .net Core 3.0. Хотя я еще не нашел явного упоминания об этом в примечаниях к выпуску, поддержка C++/CLI была необходимым условием для доставки WPF (только для Windows), которая теперь поддерживается в .net Core 3.0.

Поддержка сборок в смешанном режиме в Windows - # 18013

Эта проблема (# 18013) будет отслеживать прогресс в поддержке загрузки и работы сборки в смешанном режиме на CoreCLR. Основная цель - оказать поддержку для WPF и другого существующего кода C++/CLI в .NET Core. Некоторые работы будет зависеть от обновлений компилятора MSVC.

Проблема github (# 659), упомянутая выше @Tomas-Kubes, Будет ли CoreCLR поддерживать C++/CLI кросс-платформу? - # 659, про кроссплатформенный C++/CLI.

Кстати, я получаю предупреждения компилятора о "clr\oldsyntax" с VS2017/.net-4.7. Так что этот флаг компилятора уже устарел.

ОБНОВЛЕНИЕ: Этоне будет до .Net Core 3.1

Ответ 3

Еще одно потенциальное решение (хотя, очевидно, довольно сложная задача), если вы хотите придерживаться С++ (т.е. выставить OO-интерфейс для .NET), возможно, это посмотреть CppSharp из монопроекта. Он способен выставлять собственный С++-код через автоматически создаваемую оболочку С#. Он поддерживает Windows, Linux и OSX. Тем не менее, я не знаю, сгенерированный код может быть скомпилирован в стандартную цель .NET(не пытался). Я могу только предположить, что это было бы потому, что сгенерированный код не использует какой-либо фантастический API (это в основном interop и marshalling code); и, кстати, также можно настроить процесс генерации (хотя, опять же, возможно, это непростая задача).

Ответ 4

Официально объявлено в конце концов... (следующее желание... поддержка linux @.Net 5 ^^)

https://devblogs.microsoft.com/cppblog/the-future-of-cpp-cli-and-dotnet-core-3/

C++/CLI будет иметь полную поддержку IDE для таргетинга на .NET Core 3.1 и выше. Эта поддержка будет включать проекты, IntelliSense и отладку смешанного режима (IJW) в Windows. У нас нет планов на использование C++/CLI для macOS или Linux. Кроме того, компиляция с использованием '/clr: pure' и '/clr: safe' не будет поддерживаться для .NET Core.

Первые публичные превью для C++/CLI уже не за горами. Visual Studio 2019 16.4 Preview 1 включает обновленный компилятор с '/clr: netcore'


Обновление: От ответа отправителя: "Мы все еще работаем над интеграцией IDE и MSBuild, поэтому я пока не могу поделиться примером проекта. Как только он будет доступен, вероятно, с 16.4 Preview 2 или 3"

(16.4 Preview1 не может создать C++/CLI с проектом .NetCore.)


191015 16.4 Preview2 выпущен. Я пробовал asp.net core 3.1 с C++/CLI dll, все работает. (необходимо установить пластину на x64 как ядро asp.net, так и dll C++/CLI)