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

Функция публикации Visual Studio 2010 Publish Web не включает все библиотеки DLL

У меня есть приложение ASP.NET MVC 2.

  • Веб-проект содержит ссылку на SomeProject
  • SomeProject содержит ссылки на ExternalAssembly1 и ExternalAssembly2.
  • SomeProject явно вызывает ExternalAssembly1, но не ExternalAssembly2.
  • ExternalAssembly1 вызывает ExternalAssembly2

Когда я выполняю локальную сборку, все круто. Все библиотеки DLL включены в папку bin\debug. Проблема в том, что когда я использую команду Publish Web в Visual Studio 2010, она развертывает все, кроме ExternalAssembly2.

Похоже, что игнорировать сборки, которые не используются напрямую (помните, ExternalAssembly2 используется только ExternalAssembly1).

Можно ли каким-либо образом указать Visual Studio 2010 включить ExternalAssembly2?

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

4b9b3361

Ответ 2

У меня такая же проблема (разные сборки). Если я ссылаюсь на сборки в своем веб-проекте, они будут включены в вывод публикации, но они должны быть включены в любом случае, потому что они являются косвенными зависимостями:

Веб-проект --- > Сборка A --- > Сборка B

В сборке сборки A и B выводятся в папку \bin. При публикации в папку публикации выводится только сборка.

Я попытался изменить параметры публикации, чтобы включить все файлы в веб-проект, но затем у меня есть файлы в моем выпуске публикации, которые не следует развертывать.

Мне кажется, что это ошибка.

Ответ 3

У меня была такая же проблема с VS2010 и с сервисным приложением WCF.

Оказывается, если ваша (прямо или косвенно) ссылка на DLL развернута в GAC, функция публикации VS исключает их. Как только я удалил сборки из GAC, функция публикации начала работать как ожидалось.

Я предполагаю, что VS предполагает, что если ваши сборки могут быть расположены в GAC на машине, которую вы создадите, они также будут расположены в GAC на целевой машине. По крайней мере, в моем случае это предположение неверно.

Ответ 4

Мои тесты показывают, что внешние сборки публикуются, когда у меня есть ссылка на них в веб-проекте. Мне не нужно писать какой-нибудь фиктивный код, чтобы он работал. Это кажется мне приемлемым.

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

Ответ 6

Если вы перейдете в список свойств ссылки ExternalAssembly2 и измените "Скопировать локальный" на "Истинный", я думаю, что это может решить вашу проблему.

Ответ 7

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

Ответ 8

Я создал новую ошибку Connect здесь https://connect.microsoft.com/VisualStudio/feedback/details/731303/publish-web-feature-not-including-all-dlls

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

Голосовать за эту проблему с подключением, если у вас возникла проблема с отсутствующей DLL.

Ответ 9

Скопировать локальный трюк. У меня возникла проблема с тем, что сборка Newtonsoft.Json включена в пакет deploymeny. Локальному копированию было установлено значение false.

Ответ 10

Я испытываю тот же тип проблемы с веб-проектом. У меня есть веб-проект, который ссылается на сборку A, которая ссылается на сборку B. Она работала нормально в течение некоторого времени, но сегодня она была нарушена. Я сделал пересоединение решения, и на этот раз он развернул все правильно.

Ответ 11

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

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

Я не нашел проблему с диском на жестком диске, пока не попытался вручную переместить DLL.

Ответ 12

в моем случае это довольно сложно. Ссылка на ExternalAssembly2 не требуется для создания проекта, но важна для времени выполнения, поскольку мы используем отображение для настройки контейнера Unity. Итак, я удаляю ссылку - успешно создайте проект, но получите ошибку во время выполнения. Если я сохраню ссылку, я могу создать и запустить приложение, но я не могу опубликовать его с помощью ExternalAssembly2 - получить исключение во время выполнения. Это происходит из-за оптимизации сборки VS2010.

Итак, что мы можем здесь сделать? 1. Поместите некоторый необработанный фрагмент кода, чтобы использовать любой класс ExternalAssembly2. 2. Убежать от отражения и использовать статические сборки.

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

Ответ 13

У меня такая же проблема, и это ошибка VS2010, если есть ссылка: Веб-проект → пользовательский проект → assembly1 → (косвенно) assembly2.

Теперь, когда я ссылаюсь на Assembly1 в веб-проекте, сборка2 включается в папку bin. Поэтому мне пришлось добавить дополнительную ссылку: Веб-проект → assembly1 → (косвенно) assembly2. Затем VS может распознать сборку2 и включить ее DLL файл в действие публикации.