Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка под ASP.NET > Распространять dll вместе с сайтом


Автор: cupper 22.10.2010, 15:35
Есть сайт, гдето в нутри в одном из классов происходит загрузка dll-ки, если она лежит в /windiws/system32 то все нормально. НО dll стороняя, чтобы она появилась в system32 ее туда нужно положить. Поэтому нужно эту dll-ку хранить вместе с сайтом и чтобы при билде она автоматом в релиз добавлялась а не просто лежала там мертвым грузом. Как такое реализовать ?

Как получить путь расположения проекта из класса реализованного в App_Code (что бы указать в LoadLibrary путь до ddl-ки) ?
По пробовал делать так System.Windows.Forms.Application.StartupPath но это возвращает путь (на локальной машине) не того чего было нужно (C:\Windows\Microsoft.NET\Framework\v2.0.50727). На страничках asсx.cs есть метод Request.PhysicalApplicationPath, возвращает как раз то, нужно чтото аналогичное.

Автор: Любитель 23.10.2010, 02:09
Server.MapPath("~/App_Data").
Но вообще таскать нативные длл - это bad practice.

Автор: 1stain 23.10.2010, 10:54
  •  кладешь сборки сюда 
    http://www.google.com/search?sourceid=chrome&ie=UTF-8&q=asp.net+web+site+bin+folder&qscrl=1
    загружаешь через Assembly.Load без указания пути
  • сборки, исходники которых лежат в App_Code загружать руками не надо.
    http://msdn.microsoft.com/en-us/library/t990ks23.aspx

Автор: cupper 25.10.2010, 09:34
Цитата(Любитель @ 23.10.2010,  02:09)
Server.MapPath("~/App_Data").
Но вообще таскать нативные длл - это bad practice.

через час поисков я этот способ в итоге и нашел )) Но увы не сложилось, одна dll нормально загрузилась, другая грузиться только если  в System32/ лежит. 

На счет Assembly.Load, dll загружались при помощь
Код

[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern int LoadLibrary(string fileName);

так что нужно чтобы они просто лежали, а не самому их загружать. 

PS. "нативные длл - это bad", кто бы спорил, но на фоне всего проекта эта проблема меркнет )) и почти незаметна.

Автор: Любитель 26.10.2010, 14:46
Цитата(cupper @  25.10.2010,  09:34 Найти цитируемый пост)
другая грузиться только если  в System32/ лежит. 

Ну.. надо смотреть, в чём причина на самом деле. Виндовому лоадеру точно пофигу. В чём причина - точно нельзя сказать. Что значит "не загрузилась"? LoadLibrary что вернуло?

Автор: Freyzer 26.10.2010, 14:57
Извините за вмешательство, но не понимаю, во первых, какая проблема, запихнуть либрари в ядро системы? При условии, что она не пишеться в реестр и не конфликтует с ком объектами ?

Автор: Любитель 26.10.2010, 19:58
1. xcopy деплоить не получится.
2. Большинство хостеров (если это не дедикейтед сервер) не разрешат. Хотя, у большинства и для .Net-кода пермиссии невысокие, так что DllImport может не работать в принципе.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)