MSBuild, пример, который фильтрует все решение файлов .cs - PullRequest
0 голосов
/ 21 октября 2008

Я хочу изучать MSBuild, мне было интересно, если кто-нибудь может заставить меня начать с простого сценария сборки, чтобы отфильтровать мой проект vs.net 2008 из всех файлов с расширением .cs.

  1. как запустить сборку?
  2. где вы обычно храните сборку?

Ответы [ 2 ]

1 голос
/ 21 октября 2008

Обычно вы запускаете скрипт MSBuild из командной строки, используя следующий синтаксис:

MSBuild <scriptfilename> /t:targetname

Вы можете получить больше информации здесь: http://msdn.microsoft.com/en-us/library/0k6kkbsd.aspx

Что вы пытаетесь выполнить, анализируя все файлы .cs из файла проекта? Имейте в виду, что в VS2005 и более поздних версиях файлы проекта являются сценариями MSBuild сами по себе, поэтому вы можете просто вызвать MSBuild в командной строке и присвоить ему имя файла проекта в качестве и соответствующего цель.

При этом, если вы создаете отдельный файл скрипта, я обычно храню его в корневой папке проекта.

Если вы хотите, чтобы список файлов представлял собой одно строковое свойство, разделенное точкой с запятой:

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
  <Import Project="Project.csproj" Condition="Exists(Project.csproj')"/>

  <Target Name="Test">
     <Message Text="@(Compile)"/>
  </Target>
</Project>

Если вы хотите отображать каждый файл по отдельности:

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
  <Import Project="Project.csproj" Condition="Exists(Project.csproj')"/>

  <Target Name="Test">
     <Message Text="%(Compile.FullPath)"/>
  </Target>
</Project>

Обходя каждый из этих примеров, первая строка (<Project ...>) идентифицирует тот факт, что это файл проекта MSBuild, определяет DefaultTargets (те цели, которые будут выполняться, если не задана цель (/ t: targetname) командная строка) XML-схема (xmlns), используемая для проверки файла, и используемая версия MSBuild (ToolsVersion).

Вторая строка (<Import ...>) говорит MSBuild включить содержимое сценария MSBuild с именем «Project.csproj», если он существует.

Наконец, мы определяем цель с именем «Тест», которая содержит одну задачу. Это задание «Сообщение», которое печатает сообщение (что содержится в «Тексте») на экране.

В первом примере, <Message Text="@(Compile)"/>, мы ссылаемся на ItemGroup с именем «Compile» как список с разделителями точкой с запятой. Во втором примере мы ссылаемся на ту же ItemGroup, но зацикливаемся на каждом элементе в этой ItemGroup и печатаем содержимое метаданных «FullPath». (Compile ItemGroup определена в .csproj, который мы импортировали в строке 2.)

0 голосов
/ 21 октября 2008
C:\projects\_Play\SimpleIpService>type \\sysrdswbld1\public\bin\mrb-vs2008.cmd
@echo off

call "c:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat"

echo %0 %*
echo %0 %* >> %MrB-LOG%
cd
if not ""=="%~dp1" pushd %~dp1
cd
if exist %~nx1 (
        echo VS2008 build of '%~nx1'.
        echo VS2008 build of '%~nx1'. >> %MrB-LOG%
        set MrB-BUILDLOG=%MrB-BASE%\%MrB-WORK%.%MrB-NICEDATE%.%MrB-NICETIME%.build-errors.log
        msbuild.exe %~nx1 /t:Rebuild /p:Configuration=Release > %MrB-BUILDLOG%
        findstr /r /c:"[1-9][0-9]* Error(s)" %MrB-BUILDLOG%
        if not errorlevel 1 (
                echo ERROR: sending notification email for build errors in '%~nx1'.
                echo ERROR: sending notification email for build errors in '%~nx1'. >> %MrB-LOG%
                call mrb-email "Mr Build isn't happy about build errors in '%~nx1'" %MrB-BUILDLOG%
        ) else (
                findstr /r /c:"[1-9][0-9]* Warning(s)" %MrB-BUILDLOG%
                if not errorlevel 1 (
                        echo ERROR: sending notification email for build warnings in '%~nx1'.
                        echo ERROR: sending notification email for build warnings in '%~nx1'. >> %MrB-LOG%
                        call mrb-email "Mr Build isn't happy about build warnings in '%~nx1'" %MrB-BUILDLOG%
                ) else (
                        echo Successful build of '%~nx1'.
                        echo Successful build of '%~nx1'. >> %MrB-LOG%
                )
        )
) else (
        echo ERROR '%1' doesn't exist.
        echo ERROR '%1' doesn't exist. >> %MrB-LOG%
)
popd
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...