C# MsBuild任务和属性的范围
我有一个目标构建的构建项目C# MsBuild任务和属性的范围,c#,.net,visual-studio,msbuild,C#,.net,Visual Studio,Msbuild,我有一个目标构建的构建项目 <Target Name="Build"> <Message Text="Version : $(FullVersionNr)" /> <MSBuild Projects="@(WebProj)" Properties="WebProjectOutputDir=$(SitePublishPath);OutDir=$(SitePublishPath1);Configuration=$(Configuration)" /&
<Target Name="Build">
<Message Text="Version : $(FullVersionNr)" />
<MSBuild Projects="@(WebProj)" Properties="WebProjectOutputDir=$(SitePublishPath);OutDir=$(SitePublishPath1);Configuration=$(Configuration)" />
<Message Text="Version : $(FullVersionNr)" />
在构建过程中,我将$(FullVersionNr)设置为准确的程序集编号,最后不是这个编号
我甚至在另一个文件中声明了$(FullVersionNr)prop
<Import Project="Common.proj"/>
而且它没有出去
这只是从家长到孩子项目的单向沟通,我希望它是双向的这篇MSDN文章应该为您提供一些如何实现这一点的想法:。更具体地说,这篇博文应该回答您的范围问题:。最后一定要阅读总结 因此,如果您对多个项目进行批处理,则当您第二次访问
$(FullVersionNr)
时,可能本地上下文没有合并回全局上下文,或者一个本地上下文覆盖了另一个(即两个子项目,第一个子项目更新生成,但第二个子项目没有)
一种可能的解决方案是使用MSDN文章中描述的注册表属性,并且仅在更新属性值时写入属性。关于第二个链接和结论-“当目标执行结束时,本地上下文中更新的值会合并回全局上下文。”-在我的情况下,它没有合并回全球context@Krzy,您在
@(WebProj)
列表中是否有多个项目?如果是这样,请将$(FullVersionNr)
设置为每个版本中唯一且可预测的内容,重新运行构建,并查看最后的值。如果它仍然与原始值相同,则没有合并任何上下文。若它是不同的,那个么你们可以跟踪哪个项目改变了它。它是一个web项目,其余的项目是作为依赖项目构建的。它们都设置了相同的版本号,并且在结束时,该值不会返回到第一个项目,该项目中的行是