Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

Если вы используете проект веб-сайта в Visual Studio, и ссылка продолжает указывать его на версию GAC вместо какой-либо другой папки (например, lib), вам нужно будет создать файл xxxx.dll.refresh в папке /bin, где xxxx - это оскорбительная dll, на которую вы ссылаетесь.

Это также разрешит проблемы с сборкой в ​​MSBuild, где сервер ожидает, что dll будет в GAC. Файл .refresh получит файл с правильным относительным путем для правильной сборки.

Ответ 3

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

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

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

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

s