Я изо всех сил старался сделать это таким образом, чтобы удовлетворить все мои требования.Что такое легко поддерживаемый способ совместного использования общей библиотеки классов .net во многих корпоративных веб-приложениях asp.net mvc 3?
Вот что мы имеем в нашей библиотеке:
- Базовые классы для контроллеров и услуг
- бизнес-объектов (магазинов, отделов и т.д.)
- Общие Частичные Views (Вход, ошибка, и т.д.)
- Базовый класс для HttpApplication
- Общие общего кода (читать файл INI, создать БД соед и т.д.)
Единственное требование, которое давал мне проблемы заключается в следующем:
- живет в одном месте на сервере. (Т.е. скопировать локальный = ложь)
Это ломает, потому что:
- DLL, содержащую класс HttpApplication должен находиться в том же каталоге, что и веб-приложения DLL для запуска. Я не нашел пути вокруг этого. Я в порядке с дублированием этого кода в каждом приложении, но скорее не буду.
- Общие представления не любят работать, если я использую Assembly.LoadFrom() для загрузки DLL из общего местоположения. (Я использовал this method, чтобы прекомпилировать мои просмотры)
- Любые ярлыки пространства имен в web.config прерываются во время выполнения с ошибками компиляции, потому что web.config анализируется перед загрузкой сборки.
Мой вопрос к вам, как вы справляетесь с своим общим кодом в аналогичной среде?
GAC, похоже, больше проблем, чем его ценность, и мы хотим, чтобы все наши приложения использовали один и тот же код и не имели нескольких приложений на нескольких версиях и должны поддерживать все это. Существуют ли какие-либо дизайнерские паттеры/лучшие практики, которые могут помочь нам в этом отношении?
Кроме того, в качестве бонуса, если вы можете решить любую из проблем выше, это тоже было бы здорово.
Спасибо!
Редактировать: Я предполагаю, что следующий вопрос заключается в том, есть ли у нас даже каталог с общими dll (-ами) на сервере или если они должны быть развернуты только при развертывании/обновлении проектов?
Посмотрите здесь http://stackoverflow.com/questions/1235253/how-is-an-assembly-resolved-in-net. Вы можете добавить свои собственные материалы, чтобы найти сборки. Слишком много в одной DLL, чтобы мой образ мышления ... –
Я собираюсь поставить это как комментарий, а не ответ, потому что я действительно не рекомендую его, но я _suppose_ (при условии, что у вас есть соответствующий доступ на вашем сервере (серверах)), вы можете поместить соединения в свою папку «bin» для обычных DLL в одном центральном месте. Затем вы просто бросаете новую DLL в одно центральное место, на которое указывают все соединения. Я не уверен, что мне нравится идея этого вообще. – rejj
Это звучит грубо, а переходы не всегда используются очень часто, не так ли? Вы предлагаете это, по существу, обмануть .net, чтобы думать, что все библиотеки находятся в одном каталоге? – IronicMuffin