代码改变世界

《WF编程》系列之11 - 编译工作流:使用MSBUILD

2007-04-16 15:52  Windie Chai  阅读(3777)  评论(5编辑  收藏  举报

2.3.2.3 使用MSBuild

MSBuild是.NET 2.0 Runtime中包含的基于XML的生成引擎.Visual Studio中所有的.csproj和.vbproj项目文件都可以看作是MSBuild文件. Visual Studio 2005生成项目的过程实际上是IDE使用MSBuild托管的线程来执行的.开发人员也可以直接从命令行使用MSBuild并传递参数.Windows Worklow在安装时已经将.xoml扩展名注册给了MSBuild.下下面我们将使用MSBuild生成自定义活动和工作流到同一个程序集中,我们还是使用之前创建的XOML文件,然后创建一个MSBuild项目文件.

 

<Project 

    
DefaultTargets="Build" 

    xmlns
="http://schemas.microsoft.com/developer/msbuild/2003">

  
<PropertyGroup>

    
<OutputType>library</OutputType>

    
<AssemblyName>purexaml</AssemblyName>

  
</PropertyGroup>

  
<ItemGroup>

    
<Reference Include="System" />

    
<Reference Include="System.Workflow.Activities" />

    
<Reference Include="System.Workflow.ComponentModel" />

    
<Reference Include="System.Workflow.Runtime" />

  
</ItemGroup>

  
<ItemGroup>

    
<Compile Include="..\CustomActivity\WriteLineActivity.cs"/>

  
</ItemGroup>

  
<ItemGroup>

    
<Content Include="purexaml.xoml"/>

  
</ItemGroup>

  
<Import 

    
Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />

  
<Import 

    
Project="$(MSBuildExtensionsPath)\Microsoft\Windows Workflow 

Foundation\v3.0\Workflow.Targets"
 />

</Project>

我们的MSBuild文件由属性(Property),项(Item)和目标(Target)组成.属性可以通过设置output type和assembly name来配置生成过程.项代表生成引擎的输入,比如源代码文件和程序集引用.我们的项目中已经包含了XOML文件和WeiteLineActivity的C#源代码文件.最后,我导入目标来完成C#和工作流的编译.这些目标将执行必要的任务来编译代码和工作流.当我们在Visual Studio中创建了一个新的工作流项目,项目模板自动配置项目文件来导入工作流目标并引用工作流程序集.  

如果想要查看项目文件的XML,请在Visual Studio中右键单击项目文件,选择”卸载项目”.然后再次右键单击项目并选择编辑项目.通常,工作流项目将包含更多的XML标记,而不是像我们上边定义的那么简短,你会注意到,所有利用工作流模板创建的项目都会引用工作流程序集并导入工作流目标定义.

现在,我们所需要做的就是执行MSBuild并传递新的项目文件名称.

 

注意XOML在编译时会在临时目录中生成C#代码,这和ASP.NET编译web form一样. MSBuild 将临时源代码和项目源代码传给C#编译器.这一步非常重要,因为我们的代码会和从工作流标记生成的临时代码同时编译.

还有一点要注意的是在Visual Basic项目中,从XOML编译生成的代码是Visual Basic代码.因为Visual Basic工作流项目导入了不同的目标文件:Workflow.VisualBasic.Targets.