Почему веб-сайт ASP.NET ссылается на блок от GAC при добавлении локальной ссылки?

Когда Вы используете веб-сайт ASP.NET (вместо модели веб-приложения) и добавляете ссылку на блок от локальной папки, Visual Studio, кажется, понимает, что этот локальный блок находится также в GAC и так НЕ копирует этот блок в папку мусорного ведра (как это делает с non-GAC блоками), но просто добавляет новую запись в web.config файле.

Почему такое поведение? Действительно ли возможно вызвать копию к папке мусорного ведра (мне нужно это, так как .dll не находится на целевой среде)? Я могу добавить блок к папке мусорного ведра как файл, и это будет работать, но в этом мусорном ведре случая содержание папки будет в управлении исходным кодом, которое не хорошо.

12
задан Konstantin 7 January 2010 в 16:55
поделиться

2 ответа

Вы можете установить для свойства Copy Local значение True для ссылки. Это должно добавить его в папку bin - в проект веб-приложения.

Но для проекта веб-сайта, когда вы добавляете ссылку, все, что он делает, это добавляет строку в файл web.config, которая ссылается на сборку. Он будет искать этот файл сначала в папке bin, а затем в GAC, если он не найден.

У вас есть два варианта: потребовать, чтобы сборка была установлена ​​в GAC на целевой машине (в этом случае развертывание XCOPY невозможно) или включить все необходимые сборки в папку bin, скопировав их или написав пост-сборочный сценарий, который делает это. Вы можете найти .dll, используя командную строку и перейдя в c: \ windows \ assembly \ GAC, найдите интересующую вас сборку, cd в этот каталог, а затем cd в каталог с интересующей вас версией. Это предоставит вам путь для использования в вашем сценарии после сборки. Например, для сборки специальных возможностей в GAC у вас будет следующий путь: c: \ Windows \ assembly \ GAC \ Accessibility \ 1.0.5000.0__b03f5f7f11d50a3a \ Accessibility.dll

Вы говорите, что включение содержимого папки bin в систему управления версиями нехорошо. Обычно это считается верным для создаваемых вами двоичных файлов, но в вашем случае у вас есть двоичные ресурсы, которые не скомпилированы как часть вашего проекта. С философской точки зрения они эквивалентны изображениям: двоичные ресурсы, не скомпилированные как часть вашего проекта. Я бы сказал, что они принадлежат системе контроля версий так же, как и любой другой двоичный файл, на который опирается ваш проект. Но это личный выбор.

12
ответ дан 2 December 2019 в 07:02
поделиться

Во время выполнения сборки должны находиться в одном из двух расположений: выходной путь проекта или глобальный кэш сборок (см. Работа со сборками и Глобальный кэш сборок). Если проект содержит ссылку на объект, который не находится в одном из этих расположений, то при построении проекта ссылка должна быть скопирована в выходной путь проекта. Свойство CopyLocal указывает, нужно ли делать эту копию. Если значение равно true, ссылка копируется. Если значение равно false, ссылка не копируется.

Присвоенное проекту значение CopyLocal определяется в следующем порядке:

  1. Если ссылка является другим проектом, называемым ссылкой на проект-проект, то значение равно true.
  2. Если сборка найдена в глобальном кэше сборок, значение равно false.
  3. В качестве особого случая значение для ссылки mscorlib.dll равно false.
  4. Если сборка находится в папке Framework SDK, то значение равно false. В противном случае значение равно true.

Надеюсь, это поможет

s

4
ответ дан 2 December 2019 в 07:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: