无法创建引用.NET Core 2.0程序集的Windows服务

时间:2017-11-18 03:33:14

标签: console windows-services .net-core

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

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

那么......任何想法如何编写一个以某种方式利用Core Visual Studio项目中创建的工作的Windows服务?

参考:Another post on this topic.

2 个答案:

答案 0 :(得分:3)

虽然您可以创建一些共享程序集.NET Standard而不是.NET Core,然后在.NET Framework Windows服务中使用这些共享程序集,但在制作基于.NET Core的Windows服务时还有其他选项。

第一个是使用Windows Compatibility Pack(当前处于预览状态),允许在Windows上运行时使用.NET Core中的var dropApp = angular.module("dropApp", []); var path = require('path'); dropApp.controller("mainctrl", function ($scope) { $scope.logbut = true; $scope.login = function () { $scope.logbut = false; $scope.template = { name: 'login.html', url: path.join(__dirname, 'views', 'login.html') }; } }); 类。

另一种选择是使用ServiceBase NuGet包,允许在.NET Core和.NET Framework上创建一个与DasMulli.Win32.ServiceUtils略有不同的API的Windows服务 - 请参阅its GitHub repository 。 (免责声明:我自己开发的包,用于我工作的公司)

答案 1 :(得分:0)

更新答案

基于 Martin的回答和评论现在,您可以使用 Windows兼容包来实现此目的。

是的,net framework项目无法引用netcoreapp。 https://github.com/dotnet/standard/blob/master/docs/versions.md处的此文档显示了兼容性矩阵。 根据该网络框架只能引用兼容的netstandard项目。

根据Api reference for ServiceBase Class ServiceBase类仅在网络框架中可用。

我认为在Windows服务中利用netcoreapp项目的一个选择是使用netcore2.0和net471创建一个多目标项目,或者使用条件编译使coreapp项目成为多目标。

在csproj中为Microsoft.AspNetCore.Hosting.WindowsServices添加条件引用。然后有条件地调用host.RunAsService中的host.Runprogram.cs

有关多目标和Windows服务的更多信息,请查看

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