我正尝试使用Windows服务来托管针对.Net core 2.x的简单ASP.Net Core Web应用,如Microsoft的here所述。
这对于文档来说应该很简单,但是我却一无所获,因为Microsoft.AspNetCore.Hosting.WindowsServices软件包似乎不适用于任何版本的.Net Core(NuGet页面表示它取决于.Net Standard) 。简单地打开一个项目将导致Visual Studio陷入NuGet还原,而没有任何错误消息(我必须手动终止VS进程,因为关闭VS会导致它停止响应)。从命令运行dotnet restore将导致cmd卡在“为XXX还原软件包”中。
ASP.Net官方文档中的sample code也会发生同样的事情。我想这肯定对我来说是特定于计算机或平台的问题,但是我尝试使用各种(新)VM,但没有想法。到目前为止,唯一有效的方法是this answer here,即以.Net Framework为目标并显式列出所有程序包引用,而不是使用Microsoft.AspNetCore.All。
我正在使用VS2017 15.7.6。在这个问题上的任何帮助将不胜感激!
在VS2017中安装Azure开发工作负载后,问题神奇地消失了。之前我已经有ASP.Net和.Net Core工作负载,所以我真的不知道哪个组件可以解决问题,但确实可以解决问题。
答案 0 :(得分:1)
是的,这个answer是正确的。 windows-service package仅在Windows上运行。您必须直接定位所需的每个程序包,因为Microsoft.AspNetCore.App(.NET-Core> = 2.1)和Microsoft.AspNetCore.All(.NET-Core> = 1.1 <= 2.0)程序包都包含程序包)定位到.NET-Core而不是.NET-Standard。
您可以使用来定位两个框架
<TargetFrameworks>net471;netcoreapp2.1</TargetFrameworks>
,并且在您的项目文件中有条件包含+ c#代码中的编译器指令。
<!-- CSPROJ CONDITIONAL REFERENCE -->
<PackageReference Include="Microsoft.AspNetCore.Hosting.WindowsServices" Version="2.1.1" Condition="'$(TargetFramework)' == 'net471'" />
// c#-code compiler directive
#if net471
using Microsoft.AspNetCore.Hosting.WindowsServices;
#endif
请记住,使用完整的.NET-Framework将使您失去.NET-Core引入的性能改进。
我确定您还可以通过一个批处理脚本/ Windows任务来在每次Windows计算机重新启动时启动.NET-Core服务。
答案 1 :(得分:0)
我也有类似的问题。我们有多个Nuget套件商店,其中之一正在遇到证书问题。
我通过以下操作对其进行了修复:
在解决方案资源管理器中右键单击项目依赖项,然后单击管理Nuget程序包。
在程序包管理器的“ 已安装”选项卡中,您应该看到该程序包,选择Microsoft.AspNetCore.Hosting.WindowsServices程序包。它将显示版本0和一些指示,表明下载失败。
您可能还会在右上角看到 Package来源,指向其中一个自定义Nuget商店。将包来源更改为 ALL 。这将导致窗口刷新,然后您可能会看到正确的版本和“更新”按钮。
现在单击更新按钮进行更新。我的版本现在是2.1.1。
现在查看项目文件,它将包引用更改为:
<PackageReference Include="Microsoft.AspNetCore.Hosting.WindowsServices" Version="2.1.1" />