Пользовательские элементы управления ASP.Net в дочернем каталоге, ошибка не найдена - PullRequest
2 голосов
/ 04 мая 2011

Я недавно реорганизовал веб-приложение так, чтобы вместо всех файлов, находящихся в корне приложения, все было разделено на подпапки бизнес-сферы, а под ними - на папки по типу.Поэтому вместо:

  • ~ / MasterPage.master
  • ~ / Page.aspx
  • ~ / UserControl.ascx

Структура теперь выглядит следующим образом:

  • ~ / App / Common / MasterPages / MasterPage.master
  • ~ / App / Common / Pages / Page.aspx
  • ~ / App / Common / UserControls / UserControl.ascx

Все это довольно хорошо работает на моей машине, все компилируется и работает в режиме отладки или выпуска, однако при развертывании на тестовом сервере все происходитнемного грушевидной формы.Для развертывания я создаю MSI с использованием проектов _deploy и _msi в Visual Studio, затем запускаю MSI на тестовом сервере.

Пользовательские элементы управления, на которые ссылаются непосредственно из .aspx, выглядят нормально,но если пользовательский элемент управления имеет дочерний пользовательский элемент управления, то возникают ошибки:

Каталог 'C: \ Inetpub \ wwwroot \ WebApp \ App \ Common \ MasterPages' не существует.Не удалось запустить мониторинг изменений файла.

Каталог 'C: \ Inetpub \ wwwroot \ WebApp \ App \ Common \ UserControls' не существует.Не удалось запустить мониторинг изменений файлов.

Каталоги не существуют на тестовом сервере, поскольку в них нет файлов для входа, все их содержимое во время сборки компилируется в библиотеки DLL, поэтому MSI не 'у меня нет файлов для копирования в них.Если я создаю каталоги вручную, тогда все начинает работать, даже если они пустые, поэтому одно очевидное исправление заключается в том, чтобы включить blank.html или подобное в каждую папку, чтобы они создавались установщиком;другой вариант - поместить пользовательские элементы управления в один каталог со страницами, но все это похоже на то, как решается реальная проблема: зачем развернутому веб-приложению нужны эти каталоги, чтобы вообще существовать?

ИтакЕсть несколько вопросов, на которые я бы хотел получить ответы:

  • Является ли это принципиально неправильным подходом, могу ли я ожидать появления подобных проблем в будущем из-за этой структуры каталогов в проекте?(И если да, то как лучше организовать приложение?)
  • Есть ли способ настроить сборку так, чтобы ASP.net не нужно было «запускать мониторинг изменений файла»?(Это как-то связано с опцией «сделать скомпилированный веб-сайт обновляемым?»)
  • Есть ли хорошая документация о том, как все это работает где-то, объясняющая, что это за проблема?

1 Ответ

1 голос
/ 18 сентября 2013

У меня была та же самая точная ошибка, хотя любой UserControl мог вызвать ее, независимо от того, был ли он использован Page или другим UserControl. Я считаю, что это произошло только в том случае, если этот элемент управления использовался более 5 раз в одном запросе.

Один обходной путь - добавить пустой файл метки-заполнителя в каждый каталог, содержащий CustomControl, и установить для свойств файла метки-заполнителя значение Build Action: Content, Copy to Output Directory: Copy always. Это предотвращает исчезновение каталогов при публикации сайта.

...