我正在尝试使用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个主要项目:
这种安排对我来说似乎很合适,因为任何单元/集成测试项目都可以引用"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 …