Объект MSBuild _CopyWebApplication не копирует все необходимые файлы в папку bin
В другом месте в Интернете вы можете найти рекомендации по использованию чего-то подобного для имитации функции публикации в VS 2005 VSE IDE из командной строки (надеюсь, я не использовал синтаксис!):
msbuild /t:ResolveReferences;_CopyWebApplication /p:BuildingProject=true;OutDir=C:\inetpub\wwwroot\ blah.csproj
Теперь это похоже на копию .dll. Однако есть определенные файлы конфигурации и файлы шаблонов, которые копируются в папку bin, которые необходимы для работы приложения. Например, файл конфигурации NHibernate отображается в blah.csproj как:
<None Include="blah.cfg.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
При использовании публикации в среде IDE копирует этот файл так, как он должен, указанная выше цель _CopyWebApplication не работает. Мне нужно, чтобы этот файл был скопирован в сборке script. Это желаемое поведение для _CopyWebApplication? Любые рекомендации о том, как исправить это?
EDIT 4/21/2010:
Позвольте мне пояснить, что мы ограничены (на данный момент) проектами VS 2005 и VS 2008 и что наши скрипты сборки написаны для MSBuild 3.x. Мы еще не готовы перейти на VS 2010.
Позвольте мне также указать, что мы ищем решение, доступное из командной строки, чтобы мы могли автоматизировать команду, подобную публикации, а также настраиваемые параметры сборки и, возможно, автоматизировать развертывания в будущем.
Ответы
Ответ 1
Это всего лишь обходной путь.
В сборке script для публикации веб-сайтов после запуска MSBuild в самом веб-проекте для публикации (Targets = "ResolveReferences; _CopyWebApplication" ) я добавил операцию копирования:
<Copy SourceFiles="@(ProjectBinFiles)" DestinationFolder="$(StageBin)\%(ProjectBinFiles.RecursiveDir)" />
где ProjectBinFiles - это элемент, представляющий файлы в каталоге bin в исходном каталоге, а StageBin - это свойство, представляющее папку bin в опубликованном каталоге сайта. Пока что это работает.
Ответ 2
У меня была аналогичная проблема. Я думаю, что ответ использует MSDeploy. Исследуйте его сейчас, но можете предоставить функциональность...
Ответ 3
У меня была эта же проблема в VS 2012 и в конечном итоге она была исправлена, выполнив следующие действия для любых файлов, которые необходимо скопировать:
- Задайте для свойства "Копировать в выходной файл" значение "Копировать", если "новый"
- Задайте для свойства Build Action файла значение Content (или Compile, если файл необходимо скомпилировать)