2010-08-23 1 views
7

Я использую w7, 64bit и vs.net 2010.Visual Studio 2010 «Добавить ссылку» - это копирование dll в каталог bin?

Я добавляю ссылку на компонент, который находится в диалоговом окне «Добавить ссылки». Компонент является сторонней dll.

Исторически, на w7 32bit это добавило бы строку в мой web.config (в теге сборки), ссылающийся на эту DLL, и она не будет копировать dll в каталог bin.

Однако на 64-битной w7 dll копируется в каталог bin, и web.config не обновляется вообще.

Почему копия dll копируется в каталог bin? благодаря

Решение: (Обновлено) Эти посты дал мне ключи мне нужно.

VS.NET скопирует dll в каталог bin, если ваша система не может найти DLL в GAC. Ассембли в GAC (зарегистрированные на вашей рабочей станции) и можно найти, посмотрев каталог C: \ Windows \ Assembly.

Компоненты, перечисленные в диалоговом окне добавления ссылок vs.net, могут быть или не быть в gac. Поскольку компонент указан в диалоговом окне «Добавить ссылки», это не означает, что он зарегистрирован на вашей локальной рабочей станции. Я перешел в каталог компонентов и перетащил нужные DLL в каталог C: \ Windows \ Assembly. Я закрыл и снова открыл vs.net и просмотрел один файл (ы) и нажал ссылку на ссылку.

** Этот добавил ссылку на сборку в моем web.config (и это тоже не скопировать DLL в мой каталог веб-сайт бен) ****

ответ

5

Он получает копии в каталог bin, чтобы исполняемый файл мог его найти. Он не найдет его иначе, если только DLL не установлена ​​в GAC.

+2

dll находится в пределах gac (так как это отображается в диалоговом окне «Добавить ссылки»), поэтому я ожидаю, что он не скопирует dll – David

+2

+1, этот ответ верен. Диалоговое окно «Добавить ссылку» не имеет ничего общего с GAC. Он содержит только списки зарегистрированных сборок, он никогда не перечисляет ничего из каталогов GAC. –

11

На ссылке, есть Copy Local (в окне «Свойства»), который определяет, следует ли копировать сборку в выходной каталог.

Как, почему это не может иметь значения для других ссылок, MSDN говорит:

При развертывании/копирования приложение, которое содержит ссылку на пользовательский компонент, который зарегистрирован в GAC, компонент будет не будут развернуты/скопированы с приложением, независимо от Скопируйте местный адрес.

+0

Внутри vs.net 2010 это веб-сайт (а не веб-приложение), и поэтому в этом решении нет папки с ссылками. У меня просто есть каталог bin, и если я смотрю на свойства dll, у меня есть только «автообновление», «имя файла» и свойства «Полный путь». У меня нет свойства «copy local». – David

+0

@David Если вы добавите запись '' в файл web.config и удалите DLL, ваш сайт функционирует правильно? – bdukes

1

Дополнительно к предыдущим ответам: Я считаю, что Visual Studio определяет, установлено ли свойство Copy Local true на основании того факта, что DLL отсутствует в вашем компьютере GAC.
Это не позволяет VS копировать собственные DLL-файлы .net, поэтому по умолчанию они должны копировать только «настраиваемые» DLL-файлы.

+0

Это веб-сайт asp.net, а не «веб-приложение», и я не могу изменить локальное свойство копирования. Кроме того, компонент находится внутри gac, поэтому он должен просто добавить ссылку на него в файле web.config. Не уверен, почему, будет ли это связано с этим be7 64-разрядной рабочей станцией? – David

+0

Вы уверены, что это «Веб-сайт»? Я просто читаю, что на веб-сайте нет папки Bin ... (http://bit.ly/aOlnfD). Это странно, потому что я могу изменить это скопировать локальное значение. И это звучит странно, что поведение отличается от 32-битного и 64-битного. Может быть, это связано с тем, что DLL не компилируется в 64 бит, а компилятор выполняет что-то в скопированной DLL (точно так же, как в GAC?). Но это звучит странно. –

Смежные вопросы