Функция публикации 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.
Ответы
Ответ 1
Ни один из этих ответов не достаточен для меня. Кажется, это настоящая ошибка. Я буду обновлять этот ответ, если когда-либо найду решение без хака, или Microsoft исправляет ошибку.
Update:
Не кажется многообещающим.
https://connect.microsoft.com/VisualStudio/feedback/details/731303/publish-web-feature-not-including-all-dlls
Ответ 2
У меня такая же проблема (разные сборки). Если я ссылаюсь на сборки в своем веб-проекте, они будут включены в вывод публикации, но они должны быть включены в любом случае, потому что они являются косвенными зависимостями:
Веб-проект --- > Сборка A --- > Сборка B
В сборке сборки A и B выводятся в папку \bin. При публикации в папку публикации выводится только сборка.
Я попытался изменить параметры публикации, чтобы включить все файлы в веб-проект, но затем у меня есть файлы в моем выпуске публикации, которые не следует развертывать.
Мне кажется, что это ошибка.
Ответ 3
У меня была такая же проблема с VS2010 и с сервисным приложением WCF.
Оказывается, если ваша (прямо или косвенно) ссылка на DLL развернута в GAC, функция публикации VS исключает их. Как только я удалил сборки из GAC, функция публикации начала работать как ожидалось.
Я предполагаю, что VS предполагает, что если ваши сборки могут быть расположены в GAC на машине, которую вы создадите, они также будут расположены в GAC на целевой машине. По крайней мере, в моем случае это предположение неверно.
Ответ 4
Мои тесты показывают, что внешние сборки публикуются, когда у меня есть ссылка на них в веб-проекте. Мне не нужно писать какой-нибудь фиктивный код, чтобы он работал. Это кажется мне приемлемым.
Я согласен с Николасом в том, что это похоже на ошибку в визуальной студии. По крайней мере, это ускользает от меня, какова причина этого поведения.
Ответ 5
Я создал эту проблему как ошибку в Microsoft Connect. Если кто-то испытает это, он может проголосовать за него https://connect.microsoft.com/VisualStudio/feedback/details/637071/publish-web-feature-not-including-all-dlls, поэтому, надеюсь, мы сможем сделать что-то по этому поводу.
Ответ 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 файл в действие публикации.