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 ответов:
ни один из этих ответов не достаточно, на мой взгляд. Это действительно кажется подлинной ошибкой. Я обновлю этот ответ, если когда-либо найду решение без взлома, или 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-файл в действие публикации.