【问题标题】:MsBuild task and scope of propertiesMsBuild 任务和属性范围
【发布时间】:2011-05-12 10:00:15
【问题描述】:

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

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

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

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

<Import Project="Common.proj"/>

它没有出去。

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

【问题讨论】:

    标签: c# .net visual-studio msbuild


    【解决方案1】:

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

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

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

    【讨论】:

    • 关于第二个链接和结论 - “当目标执行结束时,本地上下文中的更新值将合并回全局上下文。” - 在我的情况下,它合并回全局上下文
    • @Krzy,@(WebProj) 列表中有多个项目吗?如果是这样,请将$(FullVersionNr) 设置为每一个中唯一且可预测的值,重新运行您的构建,然后查看最后的值是什么。如果它仍然与原始值相同,则没有任何上下文被合并。如果它不同,那么您可以跟踪哪个项目更改了它。
    • 这是一个 Web 项目,其余项目作为依赖项目构建。他们都设置了相同的版本号,最后这个值不会返回到第一个项目,其中行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-17
    • 2011-07-26
    • 1970-01-01
    • 2013-02-14
    • 2013-03-04
    • 2011-10-20
    相关资源
    最近更新 更多