Проект MSBuild Publish Web site в FileSystem не копирует библиотеки DLL из ссылочных проектов.

контекст

В VS2012 у меня есть 1 файл sln с несколькими проектами под ним. Некоторые из них являются просто библиотеками кода, а другие - веб-приложениями. И тогда у нас также есть 1 веб-сайт проекта...

Этот проект веб-сайта был недавно обновлен до.NET 4.0, что также означало, что нам нужно обновить wdproj, который использует наш сервер сборки. Я попробовал это, но, увы, сборка продолжала давать сбой.
Я решил избавиться от wdproj и использовать более новые профили публикации. Который было очень легко сгенерировать в VS2012.
На сервере сборки я использовал следующую команду:

<MSBuild Projects="<path to publishproj file>" Properties="DeployOnBuild=true; 
    PublishProfile=name-of-profile; VisualStudioVersion=11.0" />

В PublishProfile WebPublishMethod - это FileSystem, поэтому ему просто нужно скопировать все в папку.

проблема

Проект веб-сайта содержит 6 ссылок проекта, которые собираются с помощью msbuild. Результирующая папка содержит dll этих проектов, но в ней отсутствуют все упомянутые dll этих проектов, и при этом она не копирует сателлитные сборки (скомпилированные файлы ресурсов в подпапках).
Так что мне не хватает нескольких dll!

Кто-нибудь знает решение для этого?

Информация уже найдена

Я могу найти несколько постов, которые описывают одно и то же поведение, но у них либо нет решения, либо нет оптимального решения.
Пример: MSBuild не копирует ссылки dll из зависимых проектов
Аналогичный вопрос: MSBuild Package через командную строку, не включая все мои сборки

Я также начал изучать процесс msbuild для конкретного кода копирования, используемого в Microsoft.WebSite.Publishing.targets. В целевом "AfterResolveReferences" скопированы dll ссылочного проекта, но не зависимые dll.

Вся помощь очень ценится!

2 ответа

Работай!

Вы должны включить все ссылочные библиотеки из ваших ссылок проекта в ваш проект веб-сайта.

Спасибо Sayed Ibrahim Hashimi за помощь!

Включение всех ссылочных dll из ваших проектных ссылок в проект Website не всегда является хорошей идеей, особенно когда вы используете Dependency Injection: ваш веб-проект просто хочет добавить ссылку на интерфейс dll/project, а не какую-либо конкретную реализацию dll. Потому что, если вы добавляете ссылку непосредственно на реализацию dll / проекта, вы не можете помешать своему разработчику вызывать "новый" в конкретных классах реализации dll/project, а не через интерфейс, это также вы указали "жесткий код" "на вашем сайте, чтобы использовать реализацию.

Другие вопросы по тегам