在 IIS Express 中运行时调试 ASP .NET Root App 下的 ASP.Net Core 子应用程序

问题描述 投票:0回答:1

我在 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 应用程序结合使用。

所有希望要么自动启动调试器,要么获得一个句柄来附加它,但无济于事。

这个设置可能吗还是我遗漏了什么?

asp.net-mvc-5 asp.net-core-webapi visual-studio-2022 iis-express subapplication
1个回答
0
投票

正如Lex li所说,您可以使用iis来托管根应用程序和子应用程序,如下所示:

1)创建网站并部署您的根 mvc 站点:

2)在该站点下创建应用程序并使用您的 Web api 发布路径:

为此应用程序创建单独的池,并在创建应用程序时从列表中选择该应用程序池。

3)现在在浏览器中运行您的网站或应用程序

4)进入Visual Studio->调试->选择附加到进程

5)勾选“显示所有用户的进程” 在搜索中查找 w3wp.exe

6)从列表中选择您的子应用程序工作进程,然后单击附加:

根据需要设置断点并调试应用程序。

© www.soinside.com 2019 - 2024. All rights reserved.