MsBuild任务和属性范围

时间:2011-05-12 10:00:15

标签: c# .net visual-studio msbuild

我有一个带有目标构建的构建项目

<Target Name="Build">
    <Message Text="Version : $(FullVersionNr)"  />
    <MSBuild Projects="@(WebProj)"  Properties="WebProjectOutputDir=$(SitePublishPath);OutDir=$(SitePublishPath1);Configuration=$(Configuration)" />      
<Message Text="Version  : $(FullVersionNr)"  /> 

在构建过程中,我将$(FullVersionNr)设置为精确的装配编号,最后不是这个

我甚至在另一个文件

中声明了$(FullVersionNr)道具
<Import Project="Common.proj"/>

并且它没有出来。

这只是从父项目到子项目的单向沟通,我希望它是双向的

1 个答案:

答案 0 :(得分:2)

这篇MSDN文章应该为您提供一些如何实现这一目标的想法:MSBuild Properties。更具体地说,此博客文章应该回答您的范围问题:Scope of properties and item in an MSBuild script。请务必阅读最后的摘要。

因此,如果您正在对多个项目进行批处理,则当您第二次访问$(FullVersionNr)时,本地上下文可能尚未合并回全局上下文,或者一个本地上下文已覆盖另一个本地上下文(即两个子项目,第一个更新构建,但第二个不更新)。

一种可能的解决方案是使用MSDN文章中描述的注册表属性,并仅在更新其值时编写该属性。