Как вызвать MSBuild через командную строку? - PullRequest
20 голосов
/ 02 мая 2011

У меня есть веб-сайт (не веб-приложение), и я хочу публиковать его из командной строки в одном и том же каталоге каждую ночь.

Я не хочу использовать инструменты автоматизации сборки, такие как TeamCity, TFS или сторонние инструменты, такие как Nant, - это следует делать с MSBuild. Как я могу это сделать?

Обновление: в окне публикации. Единственный параметр, который следует проверить, это Use Fixed naming and single page assemblies.

Ответы [ 3 ]

21 голосов
/ 02 мая 2011

Из вашего комментария ваш веб-проект является проектом веб-сайта, а не проектом веб-приложения.

В этом случае цель «Публикация» не может быть опцией, но решением является «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>

Пока ваши библиотеки классов ссылаются на ваш проект веб-сайта, они будут создаваться вместе.

6 голосов
/ 09 января 2013
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

Он может компилировать все типы проектов (веб, веб-сервис, рабочий стол и т. Д.), А также может создавать файлы журнала как (buildlog, ошибки и предупреждения).

1 голос
/ 30 апреля 2014

Извините за поздний ответ, и спасибо за ввод Алана.К сожалению, ваше предложение не сработало, поэтому я закончил тем, что сделал следующее:

  • Выберите This build does not copy output files to a drop folder на вкладке Build defaults
  • Используйте шаблон по умолчанию на вкладке Process
  • Выберите 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 сделала такую ​​простую задачу такой сложной.

...