Подтвердить что ты не робот

Как ссылаться на проект .NET Framework в проекте .NET Core?

Мне бы очень хотелось начать использовать .NET Core и медленно переносить на него приложения и библиотеки. Однако я не могу реалистично обновить всю свою базу кода, чтобы использовать .NET Core, а затем пройти процесс тестирования и развертывания множества приложений в процессе производства.

В качестве примера, если я создаю новое приложение .NET Core и пытаюсь ссылаться на один из моих проектов .NET Framework, я получаю следующее:

Следующие проекты не поддерживаются в качестве ссылок: - Foobar.NetFramework имеет целевые рамки, которые несовместимы с цели в текущем проекте Foobar.NetCore.

Foobar.NetCore:.NETCoreApp, Version = v1.0

Foobar.NetFramework:.NETFramework, Version = v4.5

Можно ли создать новое приложение .NET Core и ссылаться на мои существующие библиотеки .NET Framework? Если да, то какой процесс для этого? Я потратил часы на обработку документации Microsoft и поиск их проблем в GitHub, но я не могу найти что-либо официальное о том, как достичь этого или как их долгосрочное видение для этого процесса.

4b9b3361

Ответ 1

Да, мы сейчас пытаемся сделать то же самое. Хитрость заключается в том, чтобы вы поддерживали одни и те же .NET-среды .NET. Внутри файла project.json убедитесь, что структура соответствует структуре проекта, который вы хотите включить. Например:

"frameworks": {
    "net46": {  --This line here <<<<
      "dependencies": {
        "DomainModel": {
          "target": "project"
        },
        "Models": {
          "target": "project"
        }
      }
    }
  },

FYI: для этого вам может потребоваться изменить структуру вашего .NET Core или ваших старых проектов..NET Core можно изменить, просто отредактировав файл project.json, как показано выше. Вы можете так же в проектах .NET, щелкнув правой кнопкой мыши по проекту и открыв свойства. Измените там уровень рамки.

Как только вы согласовали две структуры проекта, вы должны быть в состоянии их включить. Удачи!

Ответ 2

Старый вопрос, но с выходом .NetStandard 2.0 и .netcore 2.0 и vs2017.3 игра изменилась.

Вы можете использовать полную .Net Framework (TFM) с .NetCore 2. но как?

1) В vs2017.3 вы можете ссылаться на полную .NET Framework (любую версию) непосредственно из проекта .NetCore2.

2) Вы можете построить библиотеку классов .NetStandard2 и указать свой TFM. Затем обратитесь к своей библиотеке .NetStandard2 из вашего проекта .NetCore2.

Например, ссылаясь на json.net net45 из .NetStandard2. Найдите папку и выберите версию net45 (не netstandard1.3)

См. зависимость на изображении ниже, без желтого предупреждения, как вы видите.

введите описание изображения здесь

3) Даже если библиотека nuget не готова к портированию на .Netstandard 2, вы можете использовать любой API в библиотеке, совместимой с net461.

Цитата для объявления .NET Core 2/Standard 2.0 со ссылками:

.NET Core 2.0 может свободно ссылаться на библиотеки, которые были созданы для .NET Framework до версии 4.6.1

Однако некоторые библиотеки могут не работать во время выполнения, если они пытаются использовать методы API, которые недоступны в .NET Core

Ссылка: .net-приложение для ядра .NET Framework 4.5.2 в Linux

Необходимо использовать сторонние библиотеки .NET или пакеты NuGet, недоступные для .NET Core

Поэтому только в тех случаях, когда библиотеки или пакеты NuGet используют технологии, недоступные в .NET Standard/.NET Core, вам необходимо использовать .NET Framework.

Ссылка: Выбор между .NET Core и .NET Framework для серверных приложений

Теперь вы можете ссылаться на библиотеки .NET Framework из библиотек .NET Standard, используя Visual Studio 2017 15.3. Эта функция позволяет вам с течением времени перенести код .NET Framework на .NET Standard или .NET Core (начать с двоичных файлов, а затем перейти к исходному коду). Это также полезно в том случае, если исходный код больше не доступен или потерян для библиотеки .NET Framework, что позволяет ему по-прежнему использоваться в новых сценариях.

Ссылка: Объявление .NET Core 2.0