Можно ли создать C# DLL из C ++ / CLI кода, используя. Net Core 3.1 на Linux - PullRequest
1 голос
/ 28 января 2020

Это может быть очень конкретный c вопрос. Но это может быть интересно и некоторым другим людям.

Параметр может быть довольно распространенным: мы разрабатываем встроенное устройство с использованием C ++ и Linux и для этого имеем систему сборки. С нашим устройством мы поставляем настольное приложение C#, использующее механизм плагинов на основе DLL. Плагин содержит общую логику c, используемую как на встроенном устройстве, так и в приложении. Для простоты процессов было бы лучше создать DLL в нашей Linux системе сборки (следовательно, я хотел бы использовать. Net Core, а не «обычный». Net).

. как показал мой метод проб и ошибок, это невозможно - даже с. Net Core 3.1. Вы можете это подтвердить? Программное обеспечение предназначено только для windows (хотя оно скомпилировано на Linux) - так что теоретически это возможно с тех пор. Net Core поддерживает CLI / C ++ в версии 3.1 (https://devblogs.microsoft.com/dotnet/announcing-net-core-3-1/).

Что я пробовал:

  1. Я скомпилировал чистый C# код на Linux для исполняемого файла, успешно запущенного на windows, с помощью консольного приложения dotnet
  2. Я успешно создал простое тестовое приложение C ++ / CLI на Windows, используя пример кода, следующий за этим руководством: https://devblogs.microsoft.com/cppblog/an-update-on-cpp-cli-and-dotnet-core/
  3. Наконец, я принял (вероятно, слишком наивный) подход для замены Протестируйте приложение .vcxproj с .csproj шага 1 (кажется, что .csproj автоматически определяет файлы). Я получил следующее сообщение об ошибке:

цитата CS C: ошибка CS5001: Программа не содержит stati c «Основной» метод, подходящий для точки входа [/ home / vagrant / Projects / cpp_dotnet_on_linux / cs_on_ linux .csproj]

Есть что-то, что я могу улучшить, или задача просто невозможна (добавление файлов cpp вручную в .csproj, ... )? Боюсь, это просто технически невозможно, потому что я думаю. Net В Core отсутствует компилятор C ++ на Linux, но я не уверен.

1 Ответ

1 голос
/ 28 января 2020

C ++ / CLI не поддерживается на Linux.

Некоторые источники:

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

Мы не можем в настоящее время нет планов на C ++ / CLI для таргетинга на macOS или Linux. Кроме того, компиляция с «/ clr: pure» и «/ clr: safe» не будет поддерживаться для. NET Core.

https://github.com/dotnet/coreclr/issues/659#issuecomment -539742740

C ++ / CLI на Linux не будет поддерживаться и будет очень сложным. Требуется Microsoft VC ++ для поддержки Linux или Clang или G CC для поддержки C ++ / CLI. Это оба огромные проекты с неопределенной отдачей. Также неясно, позволят ли Clang или G CC когда-либо вносить изменения. Постоянное обновление современного проекта быстро движущегося компилятора очень дорого. У нас нет планов брать на себя эти проекты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...