Как поделиться пользовательскими элементами управления между веб-приложениями в ASP.NET?
Этот вопрос является продолжением моего вопроса о обмене ресурсами между веб-приложениями, потому что я еще не нашел хорошего решения.
У меня есть веб-приложение с пользовательскими элементами управления и ресурсами, которые совместно используются тремя другими веб-приложениями.
Solution
|
+-CommonControlsWebApp
| +- resources
| | +- images
| | +- scripts
| | +- stylesheets
| +- UserControls
|
+-WebApp1
|
+-WebApp2
|
+-WebApp3
Это то, что я знаю до сих пор:
- Я не могу скомпилировать CommonControlsWebApp в одну dll, так как я создаю пользовательские элементы управления. Это возможно только с настраиваемыми элементами управления сервером, где все находится в файле с кодом. Поэтому мне нужен способ совместного использования файлов ascx между четырьмя проектами.
- Копирование файлов из CommonControlsWebApp в три других проекта не обновляет их файлы в проводнике решений. Я должен был бы добавить все элементы во все три WebApps, когда файл будет добавлен или переименован в CommonControls.
- Изменение модели веб-сайта устранило бы это, но я беспокоюсь о времени компиляции для WebApp1-3, если я это сделаю.
- 'Добавить как ссылку' не работает для каталогов.
- Я мог бы использовать Subversion для обмена файлами между проектами, но я считаю, что это потребует от меня проверки файлов снова и снова все время, если я разрабатываю пользовательский элемент управления, который я должен тестировать через один из WebApps.
Может ли быть правдой, что у ASP.NET нет хорошего решения для этого? Как вы, ребята, организуете крупные веб-приложения?
Изменить: Большое спасибо за все ответы. Я собираюсь сейчас скопировать мои пользовательские элементы управления с событием сборки, а затем посмотреть, есть ли у нас время для реорганизации их в серверные элементы управления.
Ответы
Ответ 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