2017-11-18 329 views
0

我需要一个非ASPNET Windows服务(如旧式控制台应用程序)。我知道我无法在Visual Studio中创建Windows服务(仅限.NET Framework)并引用任何Core 1/2程序集;不允许。无法创建引用.NET Core 2.0程序集的Windows服务

我想利用我的其他ASPNET项目的所有工作,如数据库存储库......已经在Core 2.0中。

因此......我怎么能写一个Windows服务,以某种方式利用在Core Visual Studio项目中创建的工作?

参考:Another post on this topic.

回答

3

虽然你可以做一些共享组件.NET标准,而不是.NET核心然后在.NET Framework的Windows服务中使用这些共享程序集,还有其他选项可用于制作基于.NET Core的Windows服务。

第一个将使用Windows Compatibility Pack(当前处于预览状态),它允许在Windows上运行时使用.NET Core中的ServiceBase类。

另一种选择是使用DasMulli.Win32.ServiceUtils NuGet包,它允许使用API​​来ServiceBase有点不同既创造.NET的核心和.NET Framework的Windows服务 - 见its GitHub repository。 (免责声明:我自己开发的软件包用于我工作的公司)

+0

使用Windows兼容包进行快速测试确实有效......允许我编写Core 2。0控制台应用程序(使用ServiceBase)并引用其他Core项目。谢谢。 – user2737646

0

更新到应答

基础上马丁的答案和注释现在你可以使用的Windows兼容包为宗旨。


是的,netcoreapp不能以净额框架项目中引用。此文档在https://github.com/dotnet/standard/blob/master/docs/versions.md显示兼容性矩阵。根据那个网络框架只能参考兼容的netstandard项目。

并进一步根据Api reference for ServiceBase Class,ServiceBase类只在网络框架中可用。


一个选项来在我的脑海里利用netcoreapp项目在窗口服务中创建与netcore2.0和net471多目标项目或使coreapp项目多目标,用条件编译。

在csproj中添加对Microsoft.AspNetCore.Hosting.WindowsServices的条件引用。然后在program.cs中有条件地拨打host.RunAsServicehost.Run

有关多目标和窗口服务的更多信息,请看看

  1. How to Multitarget section in Developing Libraries with cross platform tools
  2. Host an ASP.NET Core app in a Windows Service
相关问题