В настоящее время в .NET Framework есть не только API, которые недоступны в .NET Core (например, Remoting, хостинг WCF, дополнительные домены приложений), но теперь в .NET Core также есть API, которые недоступны в .NET Framework - включает полезные дополнения к библиотеке базовых классов и множество API на основе Span<T>
, которые были добавлены к базовым типам .NET в .NET Core 2.1.
Для создания библиотек, которые можно использовать на обеих платформах, используйте .NET Standard.
Технически, самое большое различие между .NET Framework и .NET Core заключается в том, где (.dll-файлы) платформы действительно имеют свои реализации и определения типов.
Хотя в .NET Framework есть много базовых типов в mscorlib.dll
, .NET Core может содержать их внутри System.Runtime.dll
или System.Private.CoreLib.dll
.
Ссылка на тип всегда включает имя сборки и пространство имен + имя типа. Если в среде, на которой вы работаете, System.Object
определено в mscorlib
, но приложение ссылается на [System.Runtime]System.Object
, загрузка может быть невозможна.
.NET Core 2.0 приложил усилия, по крайней мере, для предоставления серверов пересылки типов, чтобы ссылки перенаправлялись на правильные сборки. Таким образом, совместимость .NET Framework может перенаправлять [mscorlib]System.Object
на [System.Runtime]System.Object
при загрузке сборок .NET Framework. (см. Оболочка совместимости, используемая в .NET Standard 2.0 )
То же самое может не работать наоборот. Хотя более новые версии .NET Framework предоставляют множество таких же сборок (реализованных с помощью переадресации типов), которые использует .NET Core, он гарантирует только совместимость с .NET Standard. Если вы ориентируетесь на более старые версии .NET Framework, дополнительные библиотеки пересылки типов будут добавлены в выходные данные сборки для обеспечения этой совместимости (см. Почему мой пакет .NET Standard NuGet вызывает так много зависимостей? ).
Это может в какой-то степени включить загрузку некоторых DLL-файлов .NET Core в .NET Framework, но нет гарантии, что это может работать. Сбой произойдет, если dll использует API, недоступные в .NET Framework, но также может произойти сбой, когда он ссылается на тип с именем сборки, которое недоступно.
Обратите внимание, что это относится только к загрузке DLL-файлов. Ссылки между проектами потерпят неудачу, поскольку инструментарий должен запрещать ссылаться на проекты .NET Core из проектов .NET Framework.