我需要非ASPNET Windows服务(如旧式控制台应用程序)。我知道我无法在Visual Studio中创建Windows服务(仅限.NET Framework)并引用任何Core 1/2程序集;不允许。
我想利用我的其他ASPNET项目的所有工作,例如已经在Core 2.0中的数据库存储库。
那么......任何想法如何编写一个以某种方式利用Core Visual Studio项目中创建的工作的Windows服务?
答案 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.Run
和program.cs
。
有关多目标和Windows服务的更多信息,请查看