делить одну и ту же DLL через различные веб-приложения без копирования - PullRequest
6 голосов
/ 28 мая 2009

У меня есть два разных веб-приложения asp.net, которые ссылаются на одну и ту же dll, например SharedLibrary.dll.

Я хочу знать, есть ли способ добавить некоторые настройки web.config в один из файлов конфигурации приложения, чтобы избежать необходимости иметь две копии библиотеки DLL.

Моя [упрощенная] структура каталогов выглядит следующим образом:

\root
     \Admin
           \web.config 
           \Addins
                  \AdminWebAppPage.aspx
                  \bin
                      \AdminWebApp.dll
                      \SharedLibrary.dll  <- this is the duplicated dll (I'd like to remove it from here ideally)
     \Websites
              \MyWebsite
                        \webroot
                                \web.config
                                \MainWebPage.aspx
                                \bin
                                    \MainWebsite.dll
                                    \SharedLibrary.dll

Ответы [ 4 ]

5 голосов
/ 28 мая 2009

Если вы зарегистрируете сборку в Global Assembly Cache (GAC) , все ваши приложения могут получить к ней доступ, не имея при этом копии. Тем не менее, с точки зрения управления версиями и развертывания, я бы сказал, что лучше сохранять копию для каждого сайта.

Разъяснение: сохранение копии на сайте предпочтительнее, если сайты не связаны между собой. Очевидно, что при изменении общей библиотеки вы бы хотели, чтобы как основной веб-сайт, так и сайт администратора получали обновленную копию. : -)

0 голосов
/ 28 мая 2009

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

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

Assembly SampleAssembly;
SampleAssembly = Assembly.LoadFrom("c:\\Sample.Assembly.dll");

И вы также можете попробовать разрешить ссылку, используя событие Assembly_Resolve.

0 голосов
/ 28 мая 2009

Если вы работаете на компьютере с Vista, вы можете использовать NTFS символическую ссылку

Если вы работаете до Vista, но на Win2k или новее, точка соединения NTFS может помочь

0 голосов
/ 28 мая 2009

Я делал это в прошлом, когда виртуальные ROOTS под веб-сайтом совместно использовали DLL. То есть у меня был сайт с некоторыми библиотеками DLL и административным виртуальным корнем под ним. Поскольку он является дочерним по отношению к основному веб-сайту, он наследует библиотеки DLL веб-сайта. Но я не уверен насчет отдельных сайтов ...

...