Понимание.Net Core и Mono
- При разработке приложения в .Net Core зависимости .NET и библиотеки DLL встраиваются в приложение? Означает ли это, что мне НЕ нужно устанавливать зависимости.Net на клиентском ПК?
- Если я разрабатываю консольное приложение .Net Core для Linux, нужно ли устанавливать Mono на ПК с Linux (клиент)?
- Совместимы ли основные приложения .Net с Android?
2 ответа
На ваш вопрос:
Нет зависимости НЕ встроены в приложение (нет статических ссылок в.NET).
Да, зависимости добавляются в виде отдельных файлов при публикации (автономно).
Если ваше приложение является приложением.NET-Core, вам НЕ требуется установленная среда.NET-Core. Также вам не нужен моно.
Вы можете сделать автономное развертывание для каждой платформы:
Окна-x86-32:
dotnet restore -r win-x86
dotnet build -r win-x86
dotnet publish -f netcoreapp2.0 -c Release -r win-x86
Окна-x86-64:
dotnet restore -r win-x64
dotnet build -r win-x64
dotnet publish -f netcoreapp2.0 -c Release -r win-x64
Linux-x86-32: не поддерживается.NET-Core
Linux-x86-64:
dotnet restore -r linux-x64
dotnet build -r linux-x64
dotnet publish -f netcoreapp2.0 -c Release -r linux-x64
Linux ARM (Android / ChromeOS)
dotnet restore -r linux-arm
dotnet build -r linux-arm
dotnet publish -f netcoreapp2.0 -c Release -r linux-arm
Linux-arm-64: НЕ ПОДДЕРЖИВАЕТСЯ.NET-Core
Это добавляет все зависимости, включая библиотеки времени выполнения.NET-Core. Вы все еще можете столкнуться с проблемами, если используемая DLL ссылается на native-dll (которую он предоставляет как встроенный ресурс), но не предоставляет необходимые библиотеки C-Runtime (например, когда native-dll/.so динамически связан - например, как в SkiaSharp).
Кроме того, .NET-Core может работать с shared-framework, что означает, что размер развертывания меньше, но тогда необходимо установить версию shared-framework.
- Поскольку Android- это Linux, а у вас нет Android, работающего на процессоре x86-32 или ARM-64, .NET-Core должен быть Android-совместимым. Я никогда не проверял эту предпосылку. Может повлечь за собой ошибки. ARM-поддержка отрывочна.
Однако мне неясно, что вы хотите делать с.NET Core на Android. Поскольку.NET не реализует никаких интерфейсов Android-UI. Xamarin-Forms может поддерживать Android-UI с.NET-Core - это, безусловно, с моно. Однако вы можете запустить веб / другой сервер на Android или консольное приложение.
Смотрите CoreDroid
Mono и.NET Core - две разные технологии.
Mono был создан Мигелем де Иказа и изначально разрабатывался как версия.NET Framework для Linux и MacOS. Как таковой, он имеет много тех же API, что и.NET Framework.
.NET Core - это кроссплатформенная реализация стандарта.NET. Как таковой, он имеет доступ только к API, описанным в .NET Standard.
Для запуска приложений, созданных с использованием.NET Core, на целевой машине должна быть установлена среда выполнения.NET Core (в зависимости от того, выполняете ли вы автономное развертывание или развертывание, зависящее от инфраструктуры)..NET Core run-time и SDK можно получить, перейдя по https://dot.net/core.
Точно так же приложения, созданные с помощью Mono, требуют установки среды выполнения Mono на целевой машине.
Как указал Lexi-Li, я бы посмотрел официальную документацию по.NET Core, чтобы узнать больше о различных вариантах развертывания.