VS2017编译的ASP.NET Core应用部署IIS后无法运行求助
我之前也碰到过类似的坑,结合你的描述来看,问题大概率出在新VS2017的默认发布配置,或是服务器上ASP.NET Core模块的匹配性上。给你几个一步步排查的方案:
1. 修正发布配置的核心选项
新VS2017默认加了一些优化选项,很容易把IIS依赖的组件给“优化”没了:
- 打开发布配置文件(
.pubxml),检查是否存在<PublishTrimmed>True</PublishTrimmed>,如果有直接改成False——这个“裁剪未使用程序集”的功能会误删ASP.NET Core模块需要的基础依赖; - 确保发布模式选框架依赖部署(FDD),同时指定和服务器系统位数一致的Runtime Identifier(比如服务器是64位就设
win-x64),Portable模式容易出现兼容性问题,不建议用。
2. 核对web.config的ASP.NET Core模块配置
虽然你装了DotNetCore.2.0.7-WindowsHosting.exe,但新VS生成的web.config可能用了错误的模块版本:
- 对比之前能正常运行的web.config,
aspNetCore节点的module属性必须是AspNetCoreModule(Core 2.0对应的是V1模块,V2是Core 3.0+才用的); - 确认
processPath和arguments正确:框架依赖部署下,processPath="dotnet",arguments是你的应用dll文件名,比如arguments=".\YourWebApi.dll"。
3. 检查IIS应用池的关键设置
这是最容易忽略的点:
- 应用池必须设置为无托管代码,ASP.NET Core应用不依赖IIS的托管运行时;
- 给应用池身份分配发布目录的读写权限,或者直接把应用池身份设为
LocalSystem(测试环境可以这么做,生产环境建议用专用账号)。
4. 查看详细错误日志
IIS默认的错误页面没什么有用信息,得看具体日志:
- 在web.config里把
stdoutLogEnabled设为true,指定日志路径:stdoutLogFile=".\logs\stdout",部署后访问应用,查看生成的日志文件,里面会明确告诉你是缺少依赖还是启动失败的具体原因; - 也可以去服务器的「事件查看器→Windows日志→应用程序」里找DotNet相关的错误条目,那里有完整的堆栈信息。
5. 用命令行强制生成旧版风格的发布产物
如果不想纠结VS的配置,直接用dotnet CLI发布,完全复刻你之前的产物结构:
打开项目根目录,运行命令:
dotnet publish -c Release -f netcoreapp2.0 -r win-x64 --self-contained false
这个命令会生成Release模式、框架依赖、对应64位Windows的发布包,产物结构和你VS2015/旧VS2017发布的完全一致,直接把bin\Release\netcoreapp2.0\win-x64\publish目录部署到IIS即可。
新建空项目也报错,说明不是项目代码的问题,按上面的步骤排查,应该很快能解决。
内容的提问来源于stack exchange,提问作者Stix
相关产品推荐
相关产品推荐

