TL; DR: используйте проект «.NET Standard» для сервера ASP.NET Core и установите зависимости ASP.NET Core также в проекте WinForms.
Длинный ответ:
Проблема в том, что Visual Studio создает проект ASP.NET Core на основе ".NET Core", но не на ".NET Standard".Поэтому мы не можем зависеть от этого.Но мы можем изменить это.Это полная настройка проекта:
1) В качестве проекта панели управления создайте решение с проектом WinForms (.NET Framework).Давайте назовем проект WinForms
.
2) Добавьте в решение проект веб-приложения ASP.NET Core.Давайте назовем это Server
.В качестве шаблона выберите шаблон «API» и выберите версию «.NET Core» «ASP.Net Core 2.1».
3) В проекте WinForms
добавьте зависимость к проекту Server
.Добавьте строку для запуска сервера, вызвав Server.Program.Main(new string[0]);
4) В проекте Server
, в методе Main
Program.cs
, я запускаю веб-хост, вызывая RunAsync()
вместоRun()
, чтобы вызов не блокировался, и мой проект Winforms смог продолжить.
Когда вы пытаетесь скомпилировать проект WinForms
сейчас, вы видите именно ту ошибку, которую я описал в своем вопросе:Проект ".NET Framework" не принимает проект ".NET Core" в качестве зависимости.К счастью, проект Server
фактически соответствует стандарту .NET, поэтому мы можем изменить это сейчас:
4) Закройте Visual Studio.Откройте Server.csproj
в текстовом редакторе и замените строку <TargetFramework>netcoreapp2.1</TargetFramework>
на <TargetFramework>netstandard2.0</TargetFramework>
.
5) Снова откройте решение в Visual Studio.Теперь мы видим проблемы с пакетами NuGet в проекте Server
.Откройте диспетчер пакетов NuGet и удалите «Microsoft.AspNetCore.App».Вместо этого установите «Microsoft.AspNetCore» и «Microsoft.AspNetCore.Mvc».Если вы посмотрите на их зависимости, вы увидите, что они оба соответствуют стандарту .NET.
6) Теперь решение компилируется нормально.Но при запуске проекта WinForms
я получаю исключение времени выполнения при вызове сервера.Некоторые файлы сборки отсутствуют.Я думаю, это потому, что нам нужны варианты .NET Framework для этих файлов сборки.
7) Поэтому в проекте WinForms
также откройте диспетчер пакетов NuGet и установите обе зависимости "Microsoft.AspNetCore"и" Microsoft.AspNetCore.Mvc "там тоже!Вы увидите, что загружены варианты .NET Framework.
8) Запустите проект WinForms
, и теперь он работает: -D