Как использовать MSBuild с помощью команды Prompt?
У меня есть веб-сайт (не web application
, это website
), и я хочу опубликовать его из command prompt
.
Я хочу опубликовать его в том же каталоге (каждую ночь), и я не хочу использовать инструменты Build Automation, такие как TeamCity, TFS или сторонние инструменты, такие как Nant.
Это нужно сделать с помощью MSBuild
.
Как я могу это сделать?
Обновление: в окне публикации единственная опция, которая должна быть проверена, - Use Fixed naming and single page assemblies
Ответы
Ответ 1
Из вашего комментария ваш веб-проект - это проект веб-сайта, а не проект веб-приложения.
В этом случае цель "Опубликовать" не может быть опцией, но "AspNetCompiler" является решением.
Создайте xml файл с содержимым ниже и вызовите его из MSBuild.
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="PrecompileWeb">
<AspNetCompiler
VirtualPath="/MyWebSite"
PhysicalPath="c:\inetpub\wwwroot\MyWebSite\"
TargetPath="c:\precompiledweb\MyWebSite\"
Force="true"
Debug="true"
FixedNames="True"
/>
</Target>
</Project>
Ссылка на эту задачу здесь, и вы можете настроить все свои параметры un/check.
FixedName = "True" равно проверке опции "использовать фиксированное имя и одну страницу...".
Затем вы вызываете этот файл из MSBuild вместо файла решения.
MSBuild your.xml /p:Configuration=<Debug/Release>
Пока ваши библиотеки классов ссылаются на ваш проект веб-сайта, они будут созданы вместе.
Ответ 2
MSBuild.exe **MYPROJ**.sln
/p:outdir="Z:\output\\",OutputPath="Z:\output\\",webprojectoutputdir="Z:\output\\",configuration=RELEASE
/t:Clean;Build
/flp1:logfile=Z:\output\\\Log_msbuild.log;verbosity=detailed
/flp2:logfile=Z:\output\\\Log_warnings.log;warningsonly;verbosity=detailed
/flp3:logfile=Z:\output\\\Log_errors.log;errorsonly;verbosity=detailed
/nologo
/noconlog
İt может скомпилировать все типы проектов (Web, webservice, desktop,..), и он может создавать файлы журналов в виде (buildlog, ошибки и предупреждения).
Ответ 3
Извините за поздний ответ и спасибо за вход alan. К сожалению, ваше предложение не сработало, поэтому я сделал следующее:
- Выберите
This build does not copy output files to a drop folder
на вкладке Build по умолчанию
- Используйте шаблон по умолчанию на вкладке "Процесс"
- Выберите
AsConfigured
как значение для Output location
в разделе 2. Build
на вкладке "Процесс"
-
Используйте эту строку аргументов MSBuild:
/p:DeployOnBuild=True;DeployTarget=PipelinePreDeployCopyAllFilesToOneFolder;PackageTempRootDir="\\192.168.x.x\Nightly\MainBranch";AutoParameterizationWebConfigConnectionStrings=false
Этот результат является следующей папкой, которую я использую в качестве веб-сайта для тестового сайта: \\192.168.x.x\Nightly\MainBranch\PackageTmp
.
Это явно не оптимально, так как я бы предпочел не иметь папку PackageTmp
, и я также не тестировал, что происходит, когда в одном решении есть несколько веб-приложений, но я не могу использовать больше времени на эту проблему.
Я действительно не понимаю, почему Microsoft сделала такую простую задачу настолько сложной.