Как использовать MSBuild с командной строкой?
у меня есть сайт (а не web application
, Это website
) и я хочу опубликовать его у command prompt
.
Я хочу опубликовать его в том же каталоге (каждую ночь), и я не хочу использовать инструменты автоматизации сборки, такие как TeamCity, TFS или сторонние инструменты, такие как Nant.
Это должно быть сделано с MSBuild
.
как я могу это сделать?
обновление : в окне публикации единственный вариант, который следует проверить is Use Fixed naming and single page assemblies
3 ответов
из вашего комментария Ваш веб-проект является проектом веб-сайта, а не проектом веб-приложения.
в этом случае цель "опубликовать" не может быть опцией, но "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>
пока ваши библиотеки классов ссылаются на ваш проект веб-сайта, они будут построены вместе.
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
он может компилировать все типы проектов (Web, webservice, desktop,..) и он может создавать файлы журнала как (buildlog, ошибка и предупреждения).
извините за поздний ответ, и спасибо за вклад Алана. К сожалению, ваше предложение не сработало, поэтому я сделал следующее:
- выбрать
This build does not copy output files to a drop folder
на вкладке Build defaults - использовать шаблон по умолчанию на вкладке процесс
- выбрать
AsConfigured
значениеOutput location
под2. Build
на вкладке процесс -
используйте этот аргумент MSBuild строка:
/p:DeployOnBuild=True;DeployTarget=PipelinePreDeployCopyAllFilesToOneFolder;PackageTempRootDir="\192.168.x.x\Nightly\MainBranch";AutoParameterizationWebConfigConnectionStrings=false
этот результат-следующая папка, которую я использую в качестве webroot для тестового сайта:\192.168.x.x\Nightly\MainBranch\PackageTmp
.
Это, очевидно, не является оптимальным, так как я бы предпочел не иметь PackageTmp
папка, и я также не тестировал, что происходит, когда в одном решении есть несколько веб-приложений, но я не могу использовать больше времени на эту проблему.
Я действительно не понимаю, почему Microsoft сделала такую простую задачу настолько сложной.