将.NET Core 2.1 Web应用部署为Windows服务时生成DLL而非EXE
问题分析与解决方案
你碰到的这个情况是.NET Core 2.x默认部署模式导致的——默认的**依赖框架部署(FDD)只会生成.dll文件,因为它依赖目标机器上已安装的.NET Core运行时。如果想要生成可直接执行的.exe文件,你需要切换到独立部署(SCD)**模式,或者在发布时明确指定目标运行时。
下面给你两种具体的解决方法:
方法1:命令行发布时指定运行时
执行dotnet publish命令时,加上目标Windows运行时参数即可,比如针对64位Windows系统:
dotnet publish -c Release -r win-x64
参数说明:
-c Release:指定发布Release版本(你之前用的是Debug模式,发布服务建议用Release,性能和稳定性更优)-r win-x64:指定目标运行时为64位Windows,发布后会生成对应的.exe文件,同时打包所有必要的.NET Core运行时文件,目标机器无需预先安装.NET Core就能运行。
方法2:修改项目文件默认配置
如果你希望每次发布都默认生成独立部署的EXE,可以在.csproj文件中添加以下配置:
<PropertyGroup> <RuntimeIdentifier>win-x64</RuntimeIdentifier> </PropertyGroup>
添加完成后,直接执行dotnet publish -c Release就能生成带.exe的发布包了。
额外补充
其实就算只有.dll文件,你的ASP.NET Core项目也能正常作为Windows服务安装运行:
- 确保目标机器安装了对应版本的.NET Core 2.1运行时(需和你使用的RC1版本匹配)
- 使用
sc create命令安装服务时,将dotnet.exe作为启动程序,项目DLL作为参数,示例:
sc create "VoyDashServerService" binPath= "C:\Program Files\dotnet\dotnet.exe C:\Temp\VoyDashServer\publish\VoyDashServer.dll"
内容的提问来源于stack exchange,提问作者kofifus
相关产品推荐
相关产品推荐

