msbuild的隐藏功能

时间:2009-05-10 21:03:15

标签: msbuild hidden-features

本周我对msbuild感兴趣。我正在清理许多非常复杂的构建脚本。挖掘它可以做多少让我感到惊讶 - msbuild本身就是.NET编程的隐藏功能。

在SO约定中,问题必须有答案,在几天或一周内,我会将最有用或最酷的隐藏功能标记为已接受。

   let bestAnswer suprise slick useful = (surprise + slick + 2*useful)

有用的定义:我正在更新现有的msbuild脚本:package(zip文件)网站和实用程序,CC.NET集成,启动测试(UT + selenium),构建数据库。我正在添加(新目标,甚至更有用):部署到VMWare虚拟服务器,链式构建(立即快速构建,队列慢速测试)。如果您引用外部库(如MSBuild community tasks),那么知道如何获取它会很好。

我已经找到了一些msbuild惊喜。

  • 使用Message任务和属性的Hello world。
  • 使用msbuild作为极其复杂的服务器产品的安装程序。 MSB community tasks管理IIS服务器设置。 WriteLinesToFileXmlUpdate任务编写了特定于服务器的配置文件。如果您使用MSI,您将知道安装任何东西都比MSI更好。
  • 对于新手:CSProj和Vbproj文件与msbuild“proj”文件相同。直接编辑:卸载csproj或vbproj,然后右键单击项目并选择编辑。这比使用笨重的预构建/后构建事件更好,更强大。
  • MSBuild附带通用的.NET安装。与其他花哨的工具不同,您可以在完全干净的服务器/桌面上使用它。

这是msbuild Hello World 写完之后,我找到了MSDN hello world

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build;Test" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
       <Who>World</Who>
  </PropertyGroup>
  <Target Name="Hello">
    <Message Text="Hello, $(Who)" Importance="high" ></Message>
  </Target>
  <Target Name="Build" DependsOnTargets="Hello"/>
  <Target Name="Test"/>
</Project>

5 个答案:

答案 0 :(得分:5)

MSBuild有许多不错的功能。我喜欢

递归文件规范

<Files Include="$(src)\**\*.cs" Exclude="$(src)\**\*test.cs" />

批处理和项目元数据

<ItemGroup>
 <F Include="SampleApplication.t">
    <Version>1</Version>
</F>
 <F Include="SampleApplication2.t">
    <Version>1</Version>
</F>
<F Include="SampleApplication3.t">
   <Version>2</Version>
</F>
</ItemGroup>
<Target Name="Build">
<Touch Files="%(F.FullPath)" AlwaysCreate="True" 
        Condition=" '%(F.Version)' > '1' ">
<Output TaskParameter="TouchedFiles" ItemName="CreatedFiles"/>
</Touch>
<Message Text="Created files = @(CreatedFiles)"/>
<Message Text="%(F.Identity) %(F.Version)"/>
</Target>

目标水平依赖性分析

<Target Name="Build"
           Inputs="@(MyItems)"
           Outputs="@(MyItems -> '$(MyItems)\%(filename).dll'">

答案 1 :(得分:4)

这不是一个隐藏的功能,但我认为batching在理解时非常强大。

有关详细信息,请阅读我的相关博客条目:

Sayed Ibrahim Hashimi

我的书:Inside the Microsoft Build Engine : Using MSBuild and Team Foundation Build

答案 2 :(得分:3)

使用 / M 命令行参数启用所有可用CPU核心的使用。

答案 3 :(得分:2)

  • 我发现MSBuild Extension包非常令人难以置信 有用。文档组织得很好,很容易找到所需的信息。

  • 他们在为构建文件配置智能感知时有一节,可以找到here

  • Attrice有一个令人难以置信的工具,如果我需要处理构建脚本,我经常使用它。让它值得您尝试一下的原因是,它有一个调试器,它会在运行构建脚本时使用auto和监视变量执行构建脚本时向您显示相关任务。 Microsoft Build Sidekick v2.3

  • 将SVN设置为安静,这让我感觉很快就提高了构建过程的速度。将以下内容添加到MSBuild.Community.Tasks.Subversion.SvnExport将运行构建而不记录它从SVN中获取的每个文件

    Arguments =“ - force -q”

答案 4 :(得分:0)

您可以从另一个中引用一个msbuild文件。我们的所有目标,例如运行NCover,SourceMonitor,Duplo等的目标都在公共目标文件中。对于每个项目,我们创建一个带有PropertyGroup和ItemGroup部分的msbuild文件,然后是一个包含到公共目标的文件。这保证了我们所有的构建都将运行相同的分析任务集,并节省我们编写脚本的时间。