我刚刚将Web应用程序从ASP.NET(框架)MVC升级到ASP.NET Core 2.2。该应用程序在IIS Express下运行良好,但是,一旦我尝试在IIS Express下运行它,就会出现一般错误:
HTTP错误500.0-ANCM进程内处理程序加载失败的常见原因 此问题的说明:Microsoft.NetCore.App的指定版本或 找不到Microsoft.AspNetCore.App。处理中的要求 处理程序Microsoft.AspNetCore.Server.IIS,未在 应用。 ANCM找不到dotnet。
我在网上搜索,发现很多开发人员都遇到了同样的问题,看来微软确实错失了这一点,并使得在IIS下开发ASP.NET Core应用程序变得尽可能痛苦。无论如何,我想突破过去24小时一直撞到头的砖墙,所以可以寻求帮助。
到目前为止我已经尝试过的事情:
安装了最新版本的.NET Core Runtime和Hosting Bundle,版本2.2.4。
安装了最新版本的.NET Core SDK,版本为2.2.203。
确保“ dotnet”可从命令行运行,并且在我的环境变量中x64版本早于x86版本。
C:\ WINDOWS \ system32>其中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进程内处理程序加载失败错误。事件查看器确实显示了一个更有用的错误:
应用程序“ C:\ Housters \ Web \”无法启动。可执行为 在“ C:\ Housters \ 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异常代码:0xc0020001故障偏移量:0x000000000003a388故障进程ID:0x2650故障 应用程序开始时间:0x01d502b1f21b112e错误的应用程序路径: c:\ windows \ system32 \ inetsrv \ w3wp.exe错误的模块路径: C:\ WINDOWS \ System32 \ KERNELBASE.dll报告ID: 5b5c14cb-8ffa-47b4-8cc1-42f951bc1256故障包全名: 与程序包相关的应用程序ID错误:
答案 0 :(得分:0)
您收到此错误,是因为未指定是要托管网站还是进行中...可以通过使用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;
}
我通过添加以下内容在.pubxml部署配置文件中设置ASPNETCORE_ENVIRONMENT:
<PropertyGroup>
<EnvironmentName>Staging</EnvironmentName>
</PropertyGroup>