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

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




在构建期间,我将$(FullVersionNr)设置为准确的程序集号,但最后不是这个nr

我什至在另一个文件中声明了$(FullVersionNr)prop

<Import Project="Common.proj"/>


并没有摆脱困境。

这是从父项目到子项目的唯一通信方式,我希望它是双向的

最佳答案

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

因此,如果您要批处理多个项目,则当您第二次访问$(FullVersionNr)时,本地上下文可能没有被合并回到全局上下文中,或者一个本地上下文已经覆盖了另一个(例如,两个子项目) ,第一个更新构建,但第二个不更新)。

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

07-24 13:52