Как использовать 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 сделала такую ​​простую задачу настолько сложной.