我想学习MSBuild,想知道是否有人可以让我开始使用简单的构建脚本来过滤掉所有带.cs扩展名的文件的vs.net 2008项目。
答案 0 :(得分:1)
您通常使用以下语法从命令行运行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包含名为“Project.csproj”的MSBuild脚本的内容(如果存在)。
最后,我们定义一个名为“Test”的目标,其中包含一个任务。该任务是“消息”任务,它在屏幕上打印一条消息(“文本”中包含的内容)。
在第一个示例<Message Text="@(Compile)"/>
中,我们将名为“Compile”的ItemGroup引用为分号分隔列表。在第二个示例中,我们引用相同的ItemGroup,但循环遍历该ItemGroup中的每个项目并打印“FullPath”元数据内容。 (Compile ItemGroup在我们在第2行导入的.csproj中定义。)
答案 1 :(得分:0)
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