Jus*_*tin 7 iis .net-core asp.net-core
我刚刚将我的 Web 应用程序从 ASP.NET(框架)MVC 升级到 ASP.NET Core 2.2。该应用程序在 IIS Express 下运行良好,但是一旦我尝试在 IIS 下运行它,它就会出现一般错误:
HTTP 错误 500.0 - ANCM 进程内处理程序加载失败 此问题的常见原因:未找到 Microsoft.NetCore.App 或 Microsoft.AspNetCore.App 的指定版本。应用程序中未引用进程中的请求处理程序 Microsoft.AspNetCore.Server.IIS。ANCM 找不到 dotnet。
我在网上搜索了一下,发现很多开发人员都遇到了同样的问题,看来微软真的错过了这个问题,并且让在 IIS 下开发 ASP.NET Core 应用程序变得尽可能痛苦。无论如何,我想突破过去 24 小时我一直在撞的这堵砖墙,所以可以使用一些帮助。
到目前为止我尝试过的事情:
安装了最新版本的 .NET Core Runtime and Hosting Bundle,版本 2.2.4。
安装了最新版本的 .NET Core SDK,版本 2.2.203。
确保“dotnet”可从命令行运行,并且在我的环境变量中 x64 版本在 x86 版本之前。
C:\WINDOWS\system32>where dotnet C:\Program Files\dotnet\dotnet.exe C:\Program Files (x86)\dotnet\dotnet.exe
尝试将我的自动生成的 Web.config 从 aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" 更改为 aspNetCore processPath="dotnet" arguments="./Housters.Web.dll" 但是更改不坚持,每次我构建我的 Web 应用程序时,Web.config 都会恢复到原来的 %LAUNCHER_PATH% 值。
尝试在 Web.config 中将“AspNetCoreModuleV2”更改为“AspNetCoreModule”。
向我的 Web.csproj 文件添加了 IsTransformWebConfigDisabled=true 以防止我的自定义 Web.config 被覆盖。它不起作用,Web.config 仍然被覆盖。
尝试在我的 Web.csproj 文件中将 AspNetCoreHostingModel=InProcess 切换为 RuntimeFrameworkName=Microsoft.AspNetCore.App。
清理解决方案,以及手动删除 bin、obj 甚至 .vs 文件夹。
这些方法都没有帮助,我仍然收到相同的 ANCM In-Process Handler Load Failure 错误。事件查看器确实显示了一个更有用的错误:
应用程序“C:\Hosters\Web\”无法启动。在“C:\Hosters\Web\%LAUNCHER_PATH%.exe”中找不到可执行文件
但是,我对此无能为力,因为我的 Web.config 更改不会持续存在。但实际上,默认设置应该是开箱即用的,我们不应该为了让 IIS 开发工作而跳槽。当 ASP.NET Core 项目默认只生成 .dll 时,为什么要查找 .exe?为什么它不将 %LAUNCHER_PATH% 替换为正确的路径,例如“bin/Debug”?
编辑:我还应该提到,有时我已经能够让我的自定义 Web.config 保持不变,当我每次尝试运行 Web 应用程序时,我都会收到 JIT 调试器提示:
选择调试或查看事件日志只会给我一个非常不友好的错误消息:
错误的应用程序名称:w3wp.exe,版本:10.0.17134.1,时间戳:0xed729d4e 错误的模块名称:KERNELBASE.dll,版本:10.0.17134.556,时间戳:0xb9f4a0f1 异常代码:0xc0080800 错误代码:0xc00802000x00000000000000000应用程序启动时间:0x01d502b1f21b112e 错误的应用程序路径:c:\windows\system32\inetsrv\w3wp.exe 错误的模块路径:C:\WINDOWS\System32\KERNELBASE.dll 报告 ID:5b5c14cb-8ffa-47b4-89561b4 错误包名称:错误的包相关应用程序 ID:
您收到此错误是因为您没有指定是否希望网站托管在进程中还是进程外...可以使用 UseIIS() 指定进程中。
尝试将 Program.cs 中的 CreateWebHostBuilder 方法更改为:
public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
var env = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
var builder = WebHost.CreateDefaultBuilder(args);
if (env == EnvironmentName.Staging || env == EnvironmentName.Production)
builder.UseIIS();
builder.UseStartup<Startup>();
return builder;
}
Run Code Online (Sandbox Code Playgroud)
我通过添加以下内容在 .pubxml 部署配置文件中设置 ASPNETCORE_ENVIRONMENT:
<PropertyGroup>
<EnvironmentName>Staging</EnvironmentName>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8162 次 |
| 最近记录: |