我一直在试图使一个任务中我TFS建立更多的通用的,并有一件事我想做的是复制一些文件,以不同的目录取决于建立使用的任务。我玩弄的想法的使用特性,但是我不能想办法做得干净,因此我试图去使用项目元数据,作为我已经能够这样做的另一个地方在同一目标的文件,我的工作上,只有这个时候,我想到使用特性。

这里就是我想要做的:

<ItemGroup>
  <DestinationParent Include="$(DeploymentPath)">
    <DestinationParentPath>$(DeploymentPath)</QuartzParentPath>
  </DestinationParent>
</ItemGroup>

后来在建立中,我试图复制一些文件,目的文件夹通过引用的项目元数据:

<Copy SourceFiles="@(FilesToCopy)" DestinationFiles="@(FilesToCopy-&gt;'%(DestinationParentPath)\Destination\%(RecursiveDir)%(Filename)%(Extension)')" ContinueOnError="false" ></Copy>

不幸的是,在建立运行,我BuildLog表示如下:

Copying file from "$(BinariesRoot)\%(ConfigurationToBuild.FlavorToBuild)\<File being copied>" to "\Destination\<File being copied>".

%(DestinationParentPath)已经扩大到一个空串,无论出于何种原因。使用%(DestinationParent.DestinationParentPath)产生的一个错误,告诉我,我应该简单地将使用%(DestinationParentPath).$(DeploymentPath)扩大到正确的字符串如预期的那样在几个其他地方的建立。

另一个来源的混淆,使用%(ConfigurationToBuild.FlavorToBuild)产生了正确的价值,即试验,可以看出,在如下:

编辑:这是下定义的根本节点项目,而该项组进行与DestinationParentPath是定义的下一个目标的节点。这是否也发挥作用?

<ItemGroup>
  <ConfigurationToBuild Include="Test|Any CPU">
    <FlavorToBuild>Test</FlavorToBuild>
    <PlatformToBuild>Any CPU</PlatformToBuild>
  </ConfigurationToBuild>
</ItemGroup>

这似乎不是,虽然包括属性是相关的时你才感兴趣的字符串中项目的元数据,因为我敢肯定"试验任何CPU"并没有参考任何实际的文件。

所以再一次为什么%(DestinationParentPath)扩大空串?

编辑:我忘了说了,我也努力试图编码的实际路径DestinationParentPath,但这仍然导致%(DestinationParentPath)扩大空串。

有帮助吗?

解决方案

编辑:这是下定义的根本节点项目,而该项组进行与DestinationParentPath是定义的下一个目标的节点。这是否也发挥作用?

是的,这有差别。能力定义的一项组进行内部目标是新msbuild3.5.尽管在寻找的声明,它实际上是在运行时执行,只是因为如果你想叫老格CreateItem/CreateProperty任务。这仅仅会导致潜在的问题:你需要时要考虑的包含的任务是(一)呼吁。 以操作并不总是显而易见的肉眼.可能是明智的,以使任务中使用%(DestinationParentPath)依赖的任务,它的建立,即使没有"合乎逻辑的"依赖关系。

此外,还有古老的msbuild范围的怪癖/错误。 动态的创造性和项目是不可见的"兄弟"的任务.此外, 项更新的嵌套生并不总是起泡了.

检查出来的解决方法的联系,您应该能够找到的东西,对你的作品甚至如果这是恶心.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top