我在 IIS Express 10 中有一个 ASP.NET(MVC 5 和 .NET Framework 4.7.2)应用程序,作为根应用程序,以及其他几个与子应用程序具有相同框架的应用程序。此设置按预期工作。示例 IIS Express
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 应用程序。
如果我尝试使用进程外托管模型运行核心应用程序,它会作为正确的应用程序启动,但在与根应用程序不同的端口上启动,从而破坏了在根应用程序下运行的原始规范。
ASP.NET Core 8.0 应用程序的
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-->
在 ASP.NET Core 应用程序的 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 App 作为 VS 中的启动,无论是单独使用还是与我的 Root 应用程序结合使用。
所有希望要么自动启动调试器,要么获得一个句柄来附加它,但无济于事。
这个设置可能吗还是我遗漏了什么?