.net core 部署到 iis 步骤及报错解决方法

环境

系统:最强Win10;

工具:轻巧VS Code;

各种百度bing都没有我要的解决方案,说的都是

  1. 保证电脑上有.net core sdk或者.net core runtime;

  2. 需要安装AspNetCoreModule托管模块:DotNetCore.2.0.5-WindowsHosting.exe

  3. 上面的托管模块安装成之后需要重启电脑,或者使用命令行。
net stop was /y
net start w3svc
  1. 发布项目,这是时候要注意权限。我发布的方式一直都是用dotnet cli 的dotnet publish命令,如果第一次发布会报权限不足的问题,然后我就会把publish文件夹的权限做一下处理。

  2. iis创建网站,然后把路径绑定到publish文件夹。

  3. 编辑应用程序池,把.net clr版本设置为无托管代码。


搜到的结果基本上和这个都差不多,但是和我的情况都不一样,哎呀我这个小脾气。

重新创建了一个.net core mvc项目发布,我靠!竟然能访问,但是原来的项目还是不能访问。

于是查看了一下windows日志

  • 用cortana打开事件查看器
  • Windows日志
  • 应用程序
  • 重新运行一下网站

嘿嘿~果然有几个错误日志,ErrorCode:0x80004005 : 8000808c

Bing了一下,大概意思是可能有版本问题(大概是因为我电脑里装了好几个.net core sdk或.net core runtime了吧)

重点!重点!重点!

就我这个English level竟然在stackoverflow上找到了解决方案。

在项目文件中添加一句话

<PropertyGroup>
    <PublishWithAspNetCoreTargetManifest>false</PublishWithAspNetCoreTargetManifest>
</PropertyGroup>

然后publish文件夹中多了好多文件夹,重新运行网站,哎呀 这个骚浪贱竟然好用了。


转自:https://www.cnblogs.com/hoyu/archive/2018/03/06/8514243.html

<think>嗯,用户遇到了在IIS部署.NET Core项目时出现404错误的问题,需要解决。首先,我得回忆一下常见的IIS.NET Core集成的问题。根据引用内容,可能涉及到ASP.NET Core模块的配置、权限问题或者应用程序池的设置。 首先,用户提到的404错误可能有几种原因。比如,ASP.NET Core模块没有正确安装或配置,这会导致IIS无法将请求转发到Kestrel。根据引用3,ASP.NET Core模块负责将请求转发到外部进程的.NET Core应用。所以,检查模块是否正确安装是关键。引用5提到了通过PowerShell安装IIS和相关功能,可能需要确认是否安装了正确的模块。 接下来,应用程序池的配置是否正确?.NET Core应用应该使用无托管代码的应用程序池,因为Core是自托管的。如果应用程序池设置成托管模式,可能会导致问题。引用2中提到的.NET Framework配置问题,可能类似,但这里需要确认应用程序池的.NET CLR版本是否为“无托管代码”。 另外,web.config文件是否正确配置了aspNetCore部分?根据引用3,模块配置需要指向正确的程序入口,比如dotnet命令和DLL路径。路径错误或者参数不对,都会导致404。需要检查processPath和arguments是否正确,以及是否设置了stdoutLogEnabled来查看日志。 还有,防火墙或端口冲突是否导致Kestrel无法监听?比如,如果应用配置了特定的端口,而该端口被占用或者被防火墙阻止,IIS模块无法与之通信,也会出现404。这时候可能需要检查端口使用情况或者暂时关闭防火墙测试。 权限问题也不容忽视。应用程序池的账户是否有权限访问项目文件夹和日志目录?如果日志目录不存在或权限不足,可能导致启动失败。需要确保IIS_IUSRS或应用程序池身份有足够的权限。 另外,检查项目是否发布正确。有时候发布时可能遗漏了必要的文件,比如DLL或appsettings.json,导致应用启动失败,从而IIS返回404。需要确认发布文件夹里的文件是否完整。 还有可能的情况是,IIS的URL重写模块未安装,导致无法正确路由请求。安装URL重写模块可能有助于解决某些路由问题。引用2中提到安装.NET Framework后的模块问题,可能需要类似的处理。 用户可能需要按照步骤逐步排查,从安装模块开始,检查配置,查看日志,验证权限等。每个步骤都可能发现潜在的问题点。比如,通过启用stdout日志,可以查看应用启动时的具体错误信息,从而定位问题。 最后,如果所有配置都正确,可能需要重启IIS或服务器,或者重新注册ASP.NET Core模块。有时候配置更改后需要重启才能生效。</think>### 分步解决方案:IIS部署.NET Core项目404错误排查 #### 1. **确认ASP.NET Core模块安装** - **操作**:在IIS服务器上安装ASP.NET Core Hosting Bundle(包含运行时和模块)。 - **说明**:缺少该模块会导致IIS无法将请求转发到.NET Core应用[^3]。 - **步骤**: 1. 访问[微软官方下载页面](https://dotnet.microsoft.com/download/dotnet-core/)下载对应版本的Hosting Bundle。 2. 安装后重启IIS服务器。 #### 2. **检查应用程序池配置** - **操作**:将应用程序池的`.NET CLR版本`设置为**无托管代码**。 - **说明**:.NET Core应用需独立运行,不依赖IIS托管[^3]。 - **步骤**: 1. 打开IIS管理器,到对应站点的应用程序池。 2. 右键选择**高级设置**,修改`.NET CLR版本`为**无托管代码**。 #### 3. **验证web.config配置** - **操作**:确保`web.config`中`aspNetCore`配置正确。 - **说明**:错误的路径或参数会导致模块无法启动应用[^3]。 - **示例配置**: ```xml <configuration> <system.webServer> <handlers> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" /> </handlers> <aspNetCore processPath="dotnet" arguments=".\YourApp.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" /> </system.webServer> </configuration> ``` - **关键检查点**: - `processPath`指向正确的`dotnet`路径(如使用绝对路径)。 - `arguments`指定正确的DLL文件名。 - `stdoutLogEnabled`设为`true`并创建`logs`目录(用于排查启动错误)。 #### 4. **检查防火墙和端口冲突** - **操作**:确认Kestrel监听的端口未被占用或阻止。 - **说明**:ASP.NET Core默认使用5000/5001端口,需确保端口可访问[^3]。 - **步骤**: 1. 运行`netstat -ano | findstr :5000`检查端口占用。 2. 临时关闭防火墙测试是否为拦截导致。 #### 5. **设置文件夹权限** - **操作**:授予应用程序池账户对项目目录的完全控制权。 - **说明**:权限不足会导致文件读取失败或日志写入失败[^2]。 - **步骤**: 1. 右键项目文件夹 → **属性** → **安全** → **编辑**。 2. 添加`IIS_IUSRS`或应用程序池自定义账户,勾选**完全控制**权限。 #### 6. **查看详细错误日志** - **操作**:通过Windows事件查看器或`stdout`日志定位具体错误。 - **步骤**: 1. 事件查看器路径:**Windows日志 → Application**。 2. `stdout`日志路径:项目目录下的`logs`文件夹(需手动创建)。 --- ### 常见问题补充 - **问题**:HTTP 500.19错误(配置无效) **解决**:检查`web.config`中是否存在语法错误,或安装缺失的IIS功能模块(如URL重写模块)[^4]。 - **问题**:HTTP 404.17(静态文件处理程序冲突) **解决**:在IIS中删除静态文件处理程序映射,或调整模块优先级[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值