В IIS у меня есть виртуальный каталог для моего веб-сайта, который находится на порту 87 и указывает на sites\MySiteName\
.На сайте также есть виртуальный подкаталог, который указывает на sites\otherSite\otherControls
.
Вот выдержка из файла решения websites.sln
, который содержит мой веб-сайт:
"Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "MySiteName", "http://localhost:87", "{5B52E21D-C089-4DCD-A7CA-8B0B70D43544}"
ProjectSection(WebsiteProperties) = preProject
UseIISExpress = "false"
TargetFrameworkMoniker = ".NETFramework,Version%3Dv4.0"
Debug.AspNetCompiler.VirtualPath = "/LM/W3SVC/2"
Debug.AspNetCompiler.TargetPath = "PrecompiledWeb\MySiteName\"
Debug.AspNetCompiler.PhysicalPath = "..\..\..\Sites\MySiteName\"
Debug.AspNetCompiler.Updateable = "true"
Debug.AspNetCompiler.ForceOverwrite = "true"
Debug.AspNetCompiler.FixedNames = "true"
Debug.AspNetCompiler.Debug = "True"
SlnRelativePath = "..\..\..\Sites\MySiteName\"
Это прекрасно работает, когда я на самом деле посещаю сайт.Когда я запускаю msbuild для проекта websites.sln
(который содержит мой сайт), он покорно создает метапроект и пытается построить.Все идет хорошо, пока он не попытается создать файл, который ссылается на элемент управления в виртуальном подкаталоге.
ASPPARSE: The file '/LM/W3SVC/2/otherControls/control.ascx' does not exist. in \LM\W3SVC\2\file.aspx
cognethos предлагает что «Компилятор ASP теперь знает, гдекорневая папка монтируется, однако, поскольку указана физическая папка, она будет искать только в этой папке и, следовательно, не будет находить другие виртуальные папки. "
Рекомендуемое решение - не указывать физический путь.Когда я это делаю, кажется, что он больше не создает MySiteName
, а вместо этого выдает предупреждения, которые явно исходят от одного из других сайтов.
Я попытался опустить как физические, так и виртуальные пути и вместо этого использовать MetabasePath:
Debug.AspNetCompiler.MetabasePath = "LM/W3SVC/2"
Это приводит к бесперспективной ошибке
C:\BUILD\MySiteName.metaproj : error MSB3462: Either MetabasePath or VirtualPath must be specified.
Мне не совсем понятно, почему он не распознает указанный мной MetabasePath.Я попытался пропустить с помощью msbuild полностью и указал aspnet_compiler
прямо на сайт, используя только MetabasePath, и это привело к той же проблеме, что и при удалении физического пути .... похоже, он строит один из других сайтов.