Visual Studio 2010 публикует веб-функцию, не включающую все библиотеки DLL


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

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

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

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

есть ли способ, которым я могу сказать Visual Studio 2010 включить ExternalAssembly2?

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

13 52

13 ответов:

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

обновление:

не кажется перспективным. https://connect.microsoft.com/VisualStudio/feedback/details/731303/publish-web-feature-not-including-all-dlls

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

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

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

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

Это похоже на ошибку для меня.

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

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

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

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

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

Я создал эту проблему как ошибку на Microsoft Connect. Если кто-то испытывает это может проголосовать за негоhttps://connect.microsoft.com/VisualStudio/feedback/details/637071/publish-web-feature-not-including-all-dlls тогда, надеюсь, мы что-нибудь с этим сделаем.

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

Я не знаю, если ты это смотришь, но я нашел решение (у меня была точно такая же проблема) через этой статье. В разделе " build action "для файла выберите" Content", который должен включать его в список файлов, которые публикуются.

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

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

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

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

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

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

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

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

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

Итак, что мы можем сделать здесь? 1. Поместите какой-то незапрошенный peice кода, чтобы использовать любой класс ExternalAssembly2. 2. выйдите из отражения и используйте связывание статических сборок.

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

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

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