我有一个带有目标构建的构建项目
<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文章中所述的注册表属性,并且仅在其值更新时才编写该属性。