Ссылка на старую (полную.NET Framework) библиотеку классов при нацеливании на.NET Core
Я занимаюсь разработкой веб-приложения на.Net Core, но, поскольку.Net Core все еще находится в разработке, некоторые используемые библиотеки еще не построены на Core.
Я знаю, что могу использовать в своем приложении.Net 4.6 для использования старых библиотек, но я не уверен, что на самом деле изменится при использовании новых функций.Net Core внутри моего приложения.
Я знаю, что таким образом я теряю мультиплатформенные возможности, но на самом деле мне это сейчас не нужно, так как мне нужно продолжать использовать унифицированный конвейер API и MVC, интегрированный контейнер зависимостей Ingnection и другие новые функции.Net Core.
Будет ли это возможно при нацеливании на старые рамки?
2 ответа
Короткий и простой ответ: вы не можете ссылаться на библиотеки.NET Framework 4.x в проекте.NET Core по той простой причине, что это две разные платформы и многие API, которые были доступны в.NET 4.5/4.6, недоступны в.NET ядро.
Однако есть некоторые исключения.
Если ваша библиотека классов нацелена
portable-net45-win8
Вы можете использовать это.Поскольку этот профиль гарантирует, что поверхность API совпадает с той, которую использует.NET Core, и основана на
System.Runtime
, Чтобы иметь возможность импортировать такие пакеты / библиотеки в приложение.NET Core или библиотеку классов.NET Core, необходимо добавить"frameworks:" { "netcoreapp1.0": { "dependencies : { }, "imports": [ "dotnet5.6", "portable-net45-win8" ] } }
Если ваша библиотека классов нацелена
dnx5x
/dotnet5.x
тогда их можно использовать так же, как указано вышеЕсли вы действительно уверены, ваша библиотека классов не использует ЛЮБОЙ неподдерживаемый API, и ни одна из ее зависимостей не использует ЛЮБОЙ неподдерживаемый API
Тогда вы могли бы технически использовать тот же прием, но я бы посоветовал НИКОГДА не делать этого, так как это позволит вам импортировать любую библиотеку.NET 4.x (даже 2.0), и вы никогда не узнаете, поддерживается она или нет. Так что не делай этого никогда.
Вместо этого преобразуйте свою библиотеку классов в переносимую библиотеку классов и цель
netstandard1.x
(зависит от используемой ранее версии.NET Framework, см. эту матрицу).Например, если ваша библиотека классов ранее была нацелена на.NET Framework 4.5.1, преобразуйте ее в
netstandard1.2
, Если есть какие-либо ошибки по поводу отсутствующего API, он использовал API, не поддерживаемые.NET Core. Вам придется исправить это (удалить его изnetstandard1.2
версия с помощью#if !NETSTANDARD1_2
директива прекомпилятора или попробуйте более высокую версию. Вы также можете выбрать две цели в новом проекте. Json absed библиотеки классов.
Да, это возможно. У меня есть проект, нацеленный на NHibernate (который зависит от полной.NET Framework), а также некоторые проекты библиотеки классов старого формата (csproj).
Я использую DI и MVC/API без проблем.