Я не могу отлаживать основные веб-приложения asp .net в виртуальных каталогах IIS Express. - PullRequest
0 голосов
/ 30 сентября 2019

Надеюсь, я получу помощь здесь, потому что, если серьезно, я потратил несколько дней на эту проблему, и я действительно понятия не имею, что я пропустил, но я не могу отлаживать веб-приложения на ядре ASP.NET подвиртуальные каталоги. Я сделал то же самое на моем предыдущем проекте на ASP. Чистая структура (не ядро ​​.net), и она работала без проблем. Основная идея состоит в том, чтобы иметь отдельные веб-приложения для некоторых путей в URL (дочерние сайты): site.com - одно корневое веб-приложение, site.com/broker/ - другое веб-приложение, site.com/services - другое веб-приложение и т. Д. Я даже проверил еще раз, чтобы сравнить, как это работает в .net Framework 4.7. Я создал два веб-приложения в рамках одного решения, создал виртуальные каталоги в VS (в свойствах проекта есть кнопка «Создать виртуальный каталог» на вкладке «Веб»), но, как я понимаю, все, что делает эта кнопка, - это добавление виртуальных каталогов. в "applicationhost.config" для IIS Express. Хорошо, вы можете установить точку останова для любого действия в контроллере в веб-приложении служб, запустить корневое веб-приложение, перейти на site.com/services/controller/action, и точка останова будет достигнута.

Но это не такработать в случае asp .net core 2.2. В VS нет кнопки «Создать виртуальный каталог», но я добавил виртуальные каталоги в «applicationhost.config» вручную.

    <sites>
      <site name="WebSite1" id="1" serverAutoStart="true">
        <application path="/">
          <virtualDirectory path="/" physicalPath="%IIS_SITES_HOME%\WebSite1" />
        </application>
        <bindings>
          <binding protocol="http" bindingInformation=":8080:localhost" />
        </bindings>
      </site>
      <site name="Main.Web" id="2">
        <application path="/" applicationPool="Clr4IntegratedAppPool">
          <virtualDirectory path="/" physicalPath="C:\projects\treasury\main\Main.Web" />
        </application>
        <application path="/broker" applicationPool="Clr4IntegratedAppPool">
          <virtualDirectory path="/" physicalPath="C:\projects\treasury\broker\Broker.Web" />
        </application>
        <application path="/services" applicationPool="Clr4IntegratedAppPool">
          <virtualDirectory path="/" physicalPath="C:\projects\treasury\services\Services.Web" />
        </application>
        <application path="/dictionary" applicationPool="Clr4IntegratedAppPool">
          <virtualDirectory path="/" physicalPath="C:\projects\treasury\dictionary\Dictionary.Web" />
        </application>
        <bindings>
          <binding protocol="http" bindingInformation="*:56164:localhost" />
        </bindings>
      </site>
      <siteDefaults>
        <!-- To enable logging, please change the below attribute "enabled" to "true" -->
        <logFile logFormat="W3C" directory="%AppData%\Microsoft\IISExpressLogs" enabled="false" />
        <traceFailedRequestsLogging directory="%AppData%\Microsoft" enabled="false" maxLogFileSizeKB="1024" />
      </siteDefaults>
      <applicationDefaults applicationPool="Clr4IntegratedAppPool" />
      <virtualDirectoryDefaults allowSubDirConfig="true" />
    </sites>

Как я понимаю, наличие web.config в корневом веб-приложении не нужно, но все дочерние веб-приложения имеют такой web.config с соответствующими путями к dll (это всего лишь пример веб-приложения «services»):

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <!--
    Configure your application settings in appsettings.json. Learn more at http://go.microsoft.com/fwlink/?LinkId=786380
  -->
  <system.webServer>
    <handlers>
      <remove name="aspNetCore"/>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath="dotnet" arguments=".\bin\Debug\netcoreapp2.2\Services.Web.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
  </system.webServer>
</configuration>

IIS Express понимает эту конфигурацию, и виртуальные каталоги работают какЯ ожидал:

IIS Express

НО!

Я не могу отлаживать дочерние приложения. Visual Studio не прикрепляет к ним отладчик, в окне «Модули» этих dll нет, и похоже, что я получил развернутое приложение именно так, как оно будет развернуто в IIS на сервере. Но не для разработки. Visual Studio запускает корневое веб-приложение, которое просто использует другие веб-приложения в качестве внешних скомпилированных dll (конечно, в каждой папке bin есть файлы pdb) и не отлаживает их.

Если дочернее веб-приложение имеет уникальный контроллерname, VS сообщает, что не загружены символы:

Точка останова с уникальным именем контроллера

Если дочернее веб-приложение имеет неуникальное имя контроллера (например, естьHomeController в корневом приложении и есть HomeController в дочернем приложении), затем я получаю это сообщение:

Точка останова с неуникальным именем контроллера

Мне интересно, потому что то же самоеКонфигурация работает без проблем в веб-приложении ASP.NET Framework. Я знаю, что IIS Express для ASP. NET Framework не то же самое IIS Express, который работает для ядра ASP. NET, потому что есть пустельга, но я не уверен, что это причина, потому что виртуальные каталоги работают,маршрутизация работает, и проблема только с отладчиком. Также мне интересно, я не нашел никакой полезной информации здесь или на других сайтах, и похоже, что ни у кого нет такой проблемы.

Ребята, пожалуйста, дайте мне какие-нибудь мысли или помощь, что я пропустил?

Спасибо!

...