Надеюсь, я получу помощь здесь, потому что, если серьезно, я потратил несколько дней на эту проблему, и я действительно понятия не имею, что я пропустил, но я не могу отлаживать веб-приложения на ядре 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, потому что есть пустельга, но я не уверен, что это причина, потому что виртуальные каталоги работают,маршрутизация работает, и проблема только с отладчиком. Также мне интересно, я не нашел никакой полезной информации здесь или на других сайтах, и похоже, что ни у кого нет такой проблемы.
Ребята, пожалуйста, дайте мне какие-нибудь мысли или помощь, что я пропустил?
Спасибо!