基于DNF4.0框架的MSBuild编译技术研究及其应用

基于DNF4.0框架的MSBuild编译技术研究及其应用

—— 俞伟

 

这两天因为工作需要,把DailyBuild工具升级到可以支援.Net Framework 4.0(以下简称DNF4.0),本想应该不需要太多的时间,结果很意外,很杯具的发现升级上来的DailyBuild不能编译VS2010建立的DNF2.0C++,只好去研究DNF4.0下的MSBuild技术实现。

 

在研究DNF4.0MSBuild的过程发现,微软已经宣布DNF4.0版本前使用的Microsoft.Build.EngineMicrosoft.Build.Engine.Project过时了。无奈,只好重新研究下DNF4.0MSBuild。这里我把一些应用到的心得分享出来,欢迎大家一起交流。

 

DNF4.0MSBuild抛弃了之前使用的Microsoft.Build.EngineMicrosoft.Build.Engine.Project,取而代之的是Microsoft.Build.Evaluation.ProjectCollectionMicrosoft.Build.Evaluation.Project,我比较懒,关于他们两个的详细信息,大家可以去看看MSDN2010,呵呵!

 

ProjectCollection主要用来载入项目文件和管理所有载入的项目,以下我用代码的方式描述下创建ProjectCollection实例对象及其使用的过程

 

 

1.创建ProjectCollection实例对象

 

 

  ToolsetDefinitionLocations.Registry:表示从注册表中读取MSBuildToolVersions信息,如下图所示:

 

2.通过ProjectCollection载入项目文件,并得到对应的MSBuildProject实例对象

 

 

3.前面我们得到了Project实例对象,就可以对项目进行编译了,理论上编译一个项目就是这样了,具体的代码如下:

  project.Build()

看看,在心的MSBuild中,编译一个项目的步骤就这些,是不是很简单!!!呵呵,不过对于我们的应用来说,显然上面所说的还是远远不够的,如:如何把项目引用替换成程序集引用,项目编译的目标程序集的一些编译属性设置等。

 

接下来,我通过代码来描述下,如何配置编译属性和project中的项目引用替换

 

1.       设置MSBuild引擎的一些公共编译属性:

 

 

2.       MSBuildProject对象中的项目引用替换成程序集引用

 

 

好了,差不多了,其它的如设置程序集版本和项目编译优先级等,这里就不列出来了,呵呵,有点啰嗦了, CU

猜你喜欢

转载自blog.csdn.net/michelsn/article/details/5872259