Соответствующие зависимости (DLL) не копируются при развертывании с использованием Visual Studio 2013
В одном из развертываемых мной веб-заданий я ссылаюсь на одну из моих библиотек классов (Core), которая занимается выполнением какого-либо процесса (в данном случае отправкой электронного письма с использованием SendGrid).
Когда я развернул свои веб-задания вручную (загрузив ZIP-файл), все работало нормально. Я очистил развертывание и повторно развернул его с помощью Visual Studio 2013, и у веб-задания начались проблемы. Основной проблемой здесь является то, что он ищет dll SendGrid, на который ссылается моя библиотека классов Core, а не мое консольное приложение, и он не завершает его, выдавая следующую ошибку:
"Необработанное исключение: System.IO.FileLoadException: не удалось загрузить файл или сборку" SendGrid.... Version=4.5.0.0, Culture= нейтральный, PublicKeyToken=30ad4fe6b2a6aeed "или одну из ее зависимостей. Определение манифеста обнаруженной сборки не совпадает ссылка на сборку. (Исключение из HRESULT: 0x80131040)
Я зашел на сайт по FTP и обнаружил, что, по сути, сборка SendGrid не там, где находится мой WebJob.
Мой вопрос: есть ли способ заставить эти зависимости копироваться в нужный каталог при развертывании с использованием VS 2013?
Спасибо,
3 ответа
Я являюсь членом команды, которая выпустила инструментарий WebJobs в обновлении Summer 2013, и я могу сообщить вам, что мы знаем об этой проблеме и проверили исправление для ее следующего обновления, которое выйдет скоро. Тем временем, обходной путь должен установить ссылки на сборки для необходимых вам сборок - только пакеты NuGet решат эту проблему - и переиздать. На самом деле мы используем пакет NuGet для логики развертывания WebJobs в VS. После того, как мы выпустим обновление, мы также выпустим NuGet (который сейчас проходит финальное тестирование), так что пользователям обновлений Summer и Fall будет устранена эта проблема.
Похоже, что это известная ошибка от Microsoft, и, к сожалению, они не слишком хотят ее исправить. Возможные решения:
- Вы можете вручную скопировать его поверх
- Создайте событие сборки, чтобы скопировать его поверх
- Кажется, некоторым людям повезло, добавив что-то вроде этого
var t = typeof(ThirdParty.SomeClass);
Решил мою проблему, выполнив следующее.
- Установите свои сборки, на которые есть ссылки, "Копировать локально -> Истина"
- Установите для конфигурации вашего решения значение "Release"