2017-11-18 330 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
相關問題