widows部署.NET Core 3.1项目到IIS问题
最近在部署.net core 3.1的项目到iis,遇到了一些问题,找了很多资料,然后通过一一实践,也就 顺利完成了部署。也因此总结记录下来,希望可以帮助到更多的人。
感谢文献参考:Windows平台部署 Asp.Net Core 3.1.0,将 ASP.NET Core 应用发布到 IIS ,使用 IIS 在 Windows 上托管 ASP.NET Core
1.首先安装SDK(我安装的是:dotnet-sdk-3.1.100-win-x64.exe)地址:https://dotnet.microsoft.com/download
2.安装.NET Core Hosting Bundle(我安装的版本是:dotnet-hosting-3.1.2-win.exe) 地址:https://dotnet.microsoft.com/download/dotnet-core/3.1
3.部署iis,绑定IP端口号,修改应用程序池托管方式
4.运行程序发生错误
a . HTTP Error 500.30 - ANCM In-Process Start Failure
b. System.InvalidOperationException: Application is running inside IIS process but is not configured to use IIS server.
c. Application '/LM/W3SVC/11/ROOT' with physical root 'D:\测试\XXXXXX-01\' hit unexpected managed exception, exception code = '0xe0434352'. First 30KB characters of captured stdout and stderr logs
d. System.InvalidOperationException: Synchronous operations are disallowed. Call WriteAsync or set AllowSynchronousIO to true instead.
5.解决方式
4-a. HTTP Error 500.30 - ANCM In-Process Start Failure
解决方式:
①.停止iis ,打开:C:\Windows\System32\inetsrv\config\applicationHost.config ,搜索节点AspNetCoreModuleV2
②.修改节点指定加载模式 preCondition="bitness64"
<add name="AspNetCoreModuleV2" image="%ProgramFiles%\IIS\Asp.Net Core Module\V2\aspnetcorev2.dll" preCondition="bitness64" /> <add name="AspNetCoreModuleV2" preCondition="bitness64" />
4- b. System.InvalidOperationException: Application is running inside IIS process but is not configured to use IIS server.
4- c. Application '/LM/W3SVC/11/ROOT' with physical root 'D:\测试\XXXXXX-01\' hit unexpected managed exception, exception code = '0xe0434352'. First 30KB characters of captured stdout and stderr logs:
解决方式:在program.cs中删除:webBuilder.UseKestrel();
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); //webBuilder.UseKestrel(); }) }
4-d .System.InvalidOperationException: Synchronous operations are disallowed. Call WriteAsync or set AllowSynchronousIO to true instead.
解决方式:在startup.cs 中的ConfigureServices方法加入以下代码
public void ConfigureServices(IServiceCollection services) { // If using Kestrel: services.Configure<KestrelServerOptions>(options => { options.AllowSynchronousIO = true; }); // If using IIS: services.Configure<IISServerOptions>(options => { options.AllowSynchronousIO = true; }); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)