首页 > 解决方案 > .NET 应用程序 (WinForms) 取决于 ASP.NET Core 服务器

问题描述

   Control Panel     ----------->        Server
  .NET Framework      depends on      ASP.NET Core
                       ⚡ FAIL ⚡ 

我有一个使用 ASP.NET Core 2.1 构建的 Web 服务器,因为它应该在普通台式计算机 (Windows 10) 和 Raspberry Pi (Windows 10 IoT Core) 上运行。到目前为止工作正常。

就在服务器在台式计算机上运行的情况下,我想为服务器提供一个基于 WinForms (.NET Framework 4.7) 的控制面板。因此(以及桌面版本所需的其他附加功能)我使用 .NET Framework 4.7 创建了第二个项目,其中包括服务器项目作为依赖项。

不幸的是,这不起作用。Visual Studio 告诉我,服务器的目标版本“netcoreapp2.1”与控制面板的版本“.NETFramework,Version=v4.7”不兼容。引用服务器 DLL 而不是项目也不起作用(编译正常,但调用服务器时出现运行时错误)。

是否有一个优雅的解决方案(除了创建两个单独的 exe 文件并使用某种形式的进程间通信)?

编辑:我知道我可以将共享代码移动到 .NET Standard 类库项目中。但我的问题是 ASP.NET Core 特定代码,比如Server.Start()从控制面板调用,其中Server特定于 ASP.NET Core。

标签: .netvisual-studioasp.net-core

解决方案


我建议您查看此处提供的表格:https ://docs.microsoft.com/en-us/dotnet/standard/net-standard

它通过针对不同版本的 .NET 标准规范来描述每个平台的可能组合。

这是使它为您工作的一种可能方法。

在您的 Visual Studio 解决方案中,创建您的 ASP.NET Core Web 应用程序,在我的测试中,我使用 .NET Core 2.0 作为目标。

然后创建一个面向 .NET Standard 2.0 的新类库:

.NET 标准类库

将此库的引用添加到您的 ASP.NET Web 应用程序。

然后添加您的 WinForms 项目,根据上表,它应该针对.NET Framework 4.6.1而不是 .NET Framework 4.7(我认为无论如何使用最新版本的 WinForms 没有任何优势)。

然后将 .NET Standard 类库的引用添加到 WinForms 项目。

将此库用于您需要在 WinForm 应用程序和网站之间共享的任何内容。

编辑

要从您的共享库访问 ASP.NET Core 功能,您可以添加 NuGetMicrosoft.AspNetCore或您需要的任何其他支持 .NET Standard 2.0 的包:

NuGet .NET 标准

您可能还需要将一些 NuGet 包添加到您的 WinForms 项目中,同样的原则适用,只要您的目标是 .NET Framework 4.6.1 并且您的 NuGet 包支持 .NET Standard 2.0 它应该可以工作。


推荐阅读