【问题标题】:Integrate ASP.Net Core into an WPF application将 ASP.Net Core 集成到 WPF 应用程序中
【发布时间】:2018-09-03 14:08:26
【问题描述】:

我目前正在尝试将 ASP.NET Core WebApi 项目集成到 WPF 应用程序中(最新的 ASP.NET Core、最新的 .NET Framework)。这个想法是为用户提供一个 REST API 来远程控制应用程序。但是,我无法将它集成到 WPF 应用程序中,并且一旦我在 WPF 项目中引用 Web 项目,我就会遇到编译错误:

“未知的构建错误,'无法解析对程序集'Microsoft.AspNetCore.Mvc.Core,Version=2.1.2.0,Culture=neutral PublicKeyToken=adb9793829ddae60'的依赖,因为它尚未预加载。使用 ReflectionOnly API 时,依赖程序集必须通过 ReflectionOnlyAssemblyResolve 事件预加载或按需加载。”

有什么办法可以解决这个问题吗?

这是一个example VS2017 solution,其中包含一个 WPF 项目和一个 ASP.NET Core 项目,我刚刚在 WPF 项目中添加了对 ASP.NET Core 项目的引用。

更新: ASP.NET Core 项目设置为针对完整的 .NET 框架,而不是使用 .NET Core。

【问题讨论】:

  • ASP.NET Core 可以针对 .NET Core 或完整运行时。 WPF 目前仅在完整框架上运行,因此 ASP.NET Core 项目也必须以完整框架为目标
  • 这就是我在项目中所做的:ASP.NET Core 以完整的运行时为目标。这个问题不是关于 .NET Core,而是关于在完整 .NET 框架下运行的 ASP.NET Core。

标签: c# .net wpf asp.net-core


【解决方案1】:

为了解决您的构建错误,您可以安装所需的缺失 Nuget 包(WebApplication1 的依赖项)及其依赖项。

通过在 WpfApp1 上安装 followinf Nuget 包,我能够成功构建并运行您提供的项目:

  1. Microsoft.AspNetCore.MVC.Core
  2. Microsoft.AspNetCore.Razor.Runtime

【讨论】:

  • 是的,这是可能的,但是,这意味着我必须在我的启动项目中添加很多不需要的 NuGet 包,并“污染”WPF 项目,因为它没有使用任何东西其中。但是,这将是一种解决方法:-/.
  • @octoate 但它们是 WebApplication1 的依赖项,如果您想添加对 WebApplication1 的引用;您还必须添加对其依赖项的引用。
【解决方案2】:

WPF 还不支持 .NET Core。您无法从 WPF 应用程序引用任何 .NET Core 程序集,因此您无法在 WPF 应用程序中托管 ASP.NET Core 应用程序。

Microsoft 已宣布从 2019 年开始支持 Windows 桌面应用程序(包括 WPF)的 .NET Core 3:https://blogs.msdn.microsoft.com/dotnet/2018/05/07/net-core-3-and-support-for-windows-desktop-applications/

【讨论】:

  • ASP.NET Core 不绑定到 .NET Core。它也可以在完整框架上运行。
  • 就像我已经在上面发布的那样:我知道并且我没有使用 .NET Core,而是将 ASP.NET Core 与完整的 .NET 框架结合使用。 VS2017 中的向导还允许选择完整的 .NET 框架并生成这样的项目。
【解决方案3】:

我建议您使用纯 WCF 来完成此操作。 WCF 还能够处理您的调用 RESTful。 只需实施服务和数据合同。要在 WPF 中启动服务,请在启动时创建一个新的“ServiceHost”以将其映射到 URL 和端口。

【讨论】:

    猜你喜欢
    • 2017-03-19
    • 2020-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 2021-02-22
    • 1970-01-01
    相关资源
    最近更新 更多