Ссылка на старую (полную.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 ядро.

Однако есть некоторые исключения.

  1. Если ваша библиотека классов нацелена portable-net45-win8 Вы можете использовать это.

    Поскольку этот профиль гарантирует, что поверхность API совпадает с той, которую использует.NET Core, и основана на System.Runtime, Чтобы иметь возможность импортировать такие пакеты / библиотеки в приложение.NET Core или библиотеку классов.NET Core, необходимо добавить

    "frameworks:" {
      "netcoreapp1.0": {
        "dependencies : { },
        "imports": [ "dotnet5.6", "portable-net45-win8" ] 
      }      
    }
    
  2. Если ваша библиотека классов нацелена dnx5x / dotnet5.xтогда их можно использовать так же, как указано выше

  3. Если вы действительно уверены, ваша библиотека классов не использует ЛЮБОЙ неподдерживаемый 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 без проблем.

Другие вопросы по тегам