Visual Studio 2010 веб-функция публикации, не включая все библиотеки DLL - PullRequest
52 голосов
/ 12 мая 2010

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

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

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

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

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

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

Ответы [ 13 ]

20 голосов
/ 24 мая 2010

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

Обновление:

Не кажется многообещающим. https://connect.microsoft.com/VisualStudio/feedback/details/731303/publish-web-feature-not-including-all-dlls

7 голосов
/ 15 мая 2010

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

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

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

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

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

6 голосов
/ 13 июня 2012

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

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

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

3 голосов
/ 20 января 2011

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

3 голосов
/ 18 мая 2010

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

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

2 голосов
/ 04 февраля 2014

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

2 голосов
/ 15 марта 2012

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

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

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

2 голосов
/ 04 октября 2010

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

2 голосов
/ 14 мая 2010

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

1 голос
/ 19 июня 2012

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

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

Надеюсь, это поможет кому-то.

...