Может ли aspnet_compiler видеть виртуальные подкаталоги? - PullRequest
1 голос
/ 26 июля 2011

В 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, и это привело к той же проблеме, что и при удалении физического пути .... похоже, он строит один из других сайтов.

...