Подтвердить что ты не робот

Как поделиться пользовательскими элементами управления между веб-приложениями в ASP.NET?

Этот вопрос является продолжением моего вопроса о обмене ресурсами между веб-приложениями, потому что я еще не нашел хорошего решения.

У меня есть веб-приложение с пользовательскими элементами управления и ресурсами, которые совместно используются тремя другими веб-приложениями.

Solution
|
+-CommonControlsWebApp
| +- resources
| |  +- images
| |  +- scripts
| |  +- stylesheets
| +- UserControls
| 
+-WebApp1
| 
+-WebApp2
| 
+-WebApp3

Это то, что я знаю до сих пор:

  • Я не могу скомпилировать CommonControlsWebApp в одну dll, так как я создаю пользовательские элементы управления. Это возможно только с настраиваемыми элементами управления сервером, где все находится в файле с кодом. Поэтому мне нужен способ совместного использования файлов ascx между четырьмя проектами.
  • Копирование файлов из CommonControlsWebApp в три других проекта не обновляет их файлы в проводнике решений. Я должен был бы добавить все элементы во все три WebApps, когда файл будет добавлен или переименован в CommonControls.
  • Изменение модели веб-сайта устранило бы это, но я беспокоюсь о времени компиляции для WebApp1-3, если я это сделаю.
  • 'Добавить как ссылку' не работает для каталогов.
  • Я мог бы использовать Subversion для обмена файлами между проектами, но я считаю, что это потребует от меня проверки файлов снова и снова все время, если я разрабатываю пользовательский элемент управления, который я должен тестировать через один из WebApps.

Может ли быть правдой, что у ASP.NET нет хорошего решения для этого? Как вы, ребята, организуете крупные веб-приложения?

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

4b9b3361

Ответ 1

Как мы это делаем в моей нынешней компании, убедитесь, что CommonControlsWebApp  это WebApplication, а не веб-сайт. Затем вы используете имена для папок, которые помогут идентифицировать его как общие, отличные от отдельных веб-приложений. (CommonUserControls вместо просто UserControls)

В других веб-приложениях вы создаете виртуальный каталог для CommonUserControls и т.д. и добавляете ссылку на файл в CommonControlsWebApp.dll

Для этого вам необходимо использовать IIS для разработки (не casini), а Visual Studio не будет верить в то, что элементы управления действительно существуют, но они будут работать во время выполнения, и вы можете построить просто отлично, только с предупреждениями о blahblah.ascx или Недопустимый путь blahblah.master.

Если вы используете общие мастер-страницы и Visual Studio 2008, вам понадобится SP1 для 2008 года и используйте __fallback.master в корне отдельных веб-проектов, чтобы войти в режим разработки.

Тем не менее, я видел это в другом потоке, и я собираюсь заняться этим больше: http://webproject.scottgu.com/CSharp/UserControls/UserControls.aspx

Ответ 2

Вы можете скомпилировать его в dll

Включение пользовательского элемента .ascx в распространяемый настраиваемый элемент управления

Краткое описание шагов

Основные шаги, чтобы это произошло следующие:

  • Напишите свой пользовательский контроль, как обычно, используя Дизайнер Visual Studio.
  • Протестируйте его с помощью простой страницы, прежде чем пытаться ее развернуть.
  • Разверните приложение, чтобы прекомпилировать его.
  • Возьмите узел управления пользователя, созданный на этапе развертывания, и вы по существу делаете: у вас есть пользовательский контроль.
  • Наконец, используйте свой собственный элемент управления в других приложениях

Дополнительная информация здесь http://www.nathanblevins.com/Articles/Compile-a-Web-User-Control-into-a-DLL-.Net-c-.aspx

Ответ 3

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

К сожалению, у asp.net нет действительно хорошего решения для этого. То же самое верно для совместного использования мастер-страниц.

Ответ 4

Вы можете рассмотреть возможность использования источника управления и совместного использования элементов управления на этом уровне. Мы делаем это для значительной библиотеки пользовательского управления, и это работает очень хорошо.

Использование SourceGear Vault, но вы можете сделать это с помощью любого продукта управления версиями.

Ответ 5

Отметьте этот сообщение о том, как решить эту проблему.

Основная идея состоит в том, чтобы изменить проект, чтобы иметь шаг предварительной сборки для копирования файлов .ascx в подкаталог веб-приложения. Затем просто используйте эти копии при их использовании. Конечно, вам также необходимо ссылаться на сборку UserControls.

Ответ 6

Один из вариантов заключается в том, чтобы попробовать "Добавить существующий" и в появившемся диалоговом окне кнопка "ОК" имеет стрелку "Drop" рядом с ней, измените ее на "Добавить" со ссылкой.

Если это не сработает, перепишите элементы управления как пользовательские элементы управления.

Это займет немного времени, но в будущем это станет намного более удобным.

Ответ 7

Эй, это не лучший способ сделать что-то, но я использовал это в моем asp.net 1.1 дня - вы можете попробовать это - смените свои пользовательские элементы управления на отдельный проект и опубликуйте этот проект как виртуальный каталог в IIS

до тех пор, пока вы не используете codebehind - ваши обновления были бы классными (только обновить папку общего доступа пользователя)

если вы используете codebehinds - передислоцируйте DLL файлы управления в разные проекты


как только вы закончите с этим - сопоставьте эти пользовательские элементы управления со всеми проектами, используя их виртуальные пути

проверить эти ссылки - http://aspadvice.com/blogs/ssmith/archive/2006/10/05/Tip_3A00_-Share-User-Controls-Between-Applications-in-ASP.NET.aspx

и

http://www.123aspx.com/redir.aspx?res=30887