在IIS Express中调试ASP.NET根应用下的ASP.NET Core子应用
ASP.NET MVC 5根应用下托管ASP.NET Core 8子应用的调试问题
环境与现有部署
在IIS Express 10中已部署ASP.NET MVC 5(.NET Framework 4.7.2)根应用及多个同框架子应用,运行正常,对应的applicationhost.config核心配置如下:
<site name="web_site_01" id="1"> <application path="/" applicationPool="Clr4IntegratedAppPool"> <virtualDirectory path="/" physicalPath="c:\c\Root\WebApp" /> </application> <application path="/subbapp01" applicationPool="Clr4IntegratedAppPool"> <virtualDirectory path="/" physicalPath="c:\c\subbapp01\WebApp" /> </application> <application path="/subbapp02" applicationPool="Clr4IntegratedAppPool"> <virtualDirectory path="/" physicalPath="c:\c\subbapp02\WebApp" /> </application> <bindings> <binding protocol="http" bindingInformation="*:5000:localhost" /> <binding protocol="https" bindingInformation="*:5001:localhost" /> </bindings> </site>
后续新增一个ASP.NET Core 8.0 WebAPI,以进程内托管模式作为根应用的子应用部署,通过配置无托管应用池实现了正常运行,修改后的applicationhost.config核心配置如下:
<applicationPools> <add name="Clr4IntegratedAppPool" managedRuntimeVersion="v4.0" managedPipelineMode="Integrated" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" /> <add name="NoManagedApi_subappNetCore01" managedRuntimeVersion="" /> <applicationPoolDefaults managedRuntimeVersion="v4.0"> <processModel loadUserProfile="true" setProfileEnvironment="false" /> </applicationPoolDefaults> </applicationPools> <sites> <site name="web_site_01" id="1"> <application path="/" applicationPool="Clr4IntegratedAppPool"> <virtualDirectory path="/" physicalPath="c:\c\Root\WebApp" /> </application> <application path="/subapp01" applicationPool="Clr4IntegratedAppPool"> <virtualDirectory path="/" physicalPath="c:\c\subapp01\WebApp" /> </application> <application path="/subapp02" applicationPool="Clr4IntegratedAppPool"> <virtualDirectory path="/" physicalPath="c:\c\subapp02\WebApp" /> </application> <application path="/subappNetCore01" applicationPool="NoManagedApi_subappNetCore01"> <virtualDirectory path="/" physicalPath="c:\c\subappNetCore01\Api" /> </application> <bindings> <binding protocol="http" bindingInformation="*:5000:localhost" /> <binding protocol="https" bindingInformation="*:5001:localhost" /> </bindings> </site> </sites>
调试问题
在Visual Studio 2022 17.8中调试时遇到以下问题:
- 以根项目启动调试时,调试器不会自动加载ASP.NET Core子应用;
- IIS Express进程已被VS调试占用,无法手动附加调试器到该进程,导致无法调试ASP.NET Core子应用;
- 若切换为进程外托管模式,Core应用会在独立端口启动,违背了作为根应用子应用部署的需求。
ASP.NET Core应用相关配置
web.config
<?xml version="1.0" encoding="utf-8"?> <configuration> <location path="." inheritInChildApplications="false"> <connectionStrings> <clear /> </connectionStrings> <appSettings> <clear /> </appSettings> <system.webServer> <handlers> <remove name="aspNetCore" /> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" /> </handlers> <aspNetCore processPath="dotnet" arguments=".\bin\Debug\net8.0\subappNetCore01.dll" stdoutLogEnabled="true" stdoutLogFile="c:\temp\logs\stdout" hostingModel="inprocess" > <environmentVariables> <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" /> </environmentVariables> </aspNetCore> <modules> <!-- Remove All managed modules because app pool is "no managed" --> <remove name="OutputCache" /> <remove name="Session" /> <remove name="WindowsAuthentication" /> <remove name="DefaultAuthentication" /> <remove name="RoleManager" /> <remove name="UrlAuthorization" /> <remove name="FileAuthorization" /> <remove name="AnonymousIdentification" /> <remove name="Profile" /> <remove name="UrlMappingsModule" /> <remove name="UrlRoutingModule-4.0" /> <remove name="ScriptModule-4.0" /> <remove name="HtmlMinificationModule" /> <remove name="TelemetryCorrelationHttpModule" /> <remove name="ApplicationInsightsWebTracking" /> <!-- Remove Incompatilbe native modules --> <remove name="CustomErrorModule" /> <remove name="DefaultDocumentModule" /> <remove name="DirectoryListingModule" /> <remove name="FileCacheModule" /> <remove name="HttpCacheModule" /> <remove name="ServerSideIncludeModule" /> <remove name="StaticCompressionModule" /> <remove name="StaticFileModule" /> <remove name="WebDAV" /> </modules> </system.webServer> </location> </configuration> <!--ProjectGuid: 7d3ad76a-f767-4d6f-a7b8-b61b422076c0-->
Program.cs
var builder = WebApplication.CreateBuilder(args); ... builder.WebHost.UseIIS(); var app = builder.Build(); ... app.UsePathBase("/subappNetCore01"); ... app.MapControllers(); app.Run();
已尝试的方案
- 调整ASP.NET Core应用的
web.config配置; - 切换进程外托管模式测试;
- 将Core应用单独或与根应用组合设置为VS启动项;
以上尝试均无法实现自动加载调试器或成功附加调试器。
提问
此部署调试场景是否可行?是否遗漏了关键配置?
内容的提问来源于stack exchange,提问作者Dim Tsoumg
相关产品推荐
相关产品推荐

