小编Nor*_*ini的帖子

将ASP.Net Core 2(.NET Framework)Web Api拆分为类库和托管项目是否可行/明智?

我正在尝试使用Visual Studio 2017(v15.4.5)将现有的WCF Web API(以.NET Framework 4.6.1为目标)移植到ASP.Net Core 2,并且无法确定组织项目的良好/通用/支持方式,以及他们应该是什么类型的项目.

例如:

  • 用于服务器和主机的单个项目,用于托管的服务器和控制台应用程序的类库

  • 用于控制台应用程序的Windows经典桌面项目和(新样式csproj)服务器库两个Web应用程序的Web应用程序(一个输出类库,另一个输出控制台应用程序)

我有一种潜在的怀疑,即我缺少一些基本的东西,这意味着一种方法应该优于其他方法,或者甚至是强制性的,但是发现很难从ASP.Net Core 2文档中发现这种方法.

具体要求

  • 应该针对.NET Framework 4.6.1
    因为我需要从Web API的内部访问Windows注册表,所以我的目标是.NET Framework 4.6.1而不是.NET Core.

  • 主机使用HTTP.sys
    我打算将来使用Windows身份验证,并相信Kestrel不支持(基于HTTP.sys功能).

  • 主机应作为Windows服务运行
    最终,Web API应由Windows Installer安装并作为服务运行.
    目前,我只是想让API独立构建/工作,但也希望能够深入了解项目选择如何影响发布/部署.

首选方案

虽然默认情况下,新的ASP.NET Core 2 Web应用程序是输出控制台应用程序的单个项目,但我更倾向于将解决方案拆分为2个主要项目:

  • "服务器" - 包含Web API,控制器和启动类的业务逻辑的ASP.NET Core 2(.NET Framework)类库
  • "主机" - 控制台应用程序,它引用"服务器"并负责托管Web API

这种安排对我来说似乎很合适,因为任何单元/集成测试项目都可以引用"Server"类库,而不是可执行文件(根据建议,在C#项目中引用exe文件是不好的做法).

此外,我认为这是合理的,因为我可以在项目属性中将输出类型更改为"类库".

我假设,因为我的目标是.Net Framework,只要我安装与"Server"项目相同的NuGet包,就没有理由认为"Host"项目不能是Windows Classic桌面控制台应用程序.

是否有任何隐藏的问题,可能与发布/部署有关,这使得这种安排成为一个坏主意?使Hosting项目成为Web应用程序(仍会引用Server项目)会有什么好处吗?

尝试

以下是我用来尝试实现我首选项目组织的步骤.虽然它有效,但我会在构建期间收到警告 - 见下文.

服务器

  • 添加新项目"服务器"

    • 选择Visual C#,Web,ASP.NET Core Web Application

      在以下对话框中,以.NET Framework,ASP.NET Core 2.0为目标,然后选择Web API …

.net c# asp.net-core-mvc asp.net-core-2.0

7
推荐指数
1
解决办法
583
查看次数

标签 统计

.net ×1

asp.net-core-2.0 ×1

asp.net-core-mvc ×1

c# ×1