0

在重新设计我们的部署过程时,我转而使用 MSBuild 项目来代替我们现有的批处理文件。所有主要元素都已到位,我本来想减少一两步,但遇到了障碍。

我正在使用 CombinePath 任务创建一个名为 OutputPath 的属性,虽然在创建它之后我可以毫无问题地访问它,但我不知道如何利用它来发挥我的优势。考虑:

<CombinePath BasePath ="$(DeployFolderRoot)" Paths ="$(DeployReleaseFolder)$(ReleaseFolderFormatted)" >
  <Output TaskParameter ="CombinedPaths" ItemName ="OutputFolder"/>
</CombinePath>

<MakeDir Directories="@(OutputFolder)" />
<MakeDir Directories="@(OutputFolder)\Foo" />
<MakeDir Directories="@(OutputFolder)\Bar" />

命令 2 和 3 失败,因为我正在引用一个数组并尝试与一个字符串连接。创建一个属性并将其分配给 @(OutputFolder) 只会导致另一个项目组,而不是我可以使用 $ 访问器引用的属性。我确实有一个丑陋的解决方法,但我想稍微澄清一下。

谢谢,

-何塞

4

2 回答 2

3

我不确定确切的答案,但这是一个想法:

<CombinePath BasePath ="$(DeployFolderRoot)" Paths ="$(DeployReleaseFolder)$(ReleaseFolderFormatted)" >
  <Output TaskParameter ="CombinedPaths" ItemName ="OutputFolder"/>
</CombinePath>

<OutputFolder Include="$(DeployFolderRoot)$(DeployReleaseFolder)$(ReleaseFolderFormatted)\Foo" /> 
<OutputFolder Include="$(DeployFolderRoot)$(DeployReleaseFolder)$(ReleaseFolderFormatted)\Bar" />

<MakeDir Directories="@(OutputFolder)" />

本质上,如果您使用路径创建 OutputFolder 项目,它们只会被附加到列表中。顺便说一句,这必须在一个元素中,并且您必须使用 Include=""。

于 2009-07-06T18:55:15.520 回答
1

哦!绝对是无知,在输出元素上使用了错误的属性。

<CombinePath BasePath ="$(DeployFolderRoot)" Paths ="$(DeployReleaseFolder)$(ReleaseFolderFormatted)" >
  <Output TaskParameter ="CombinedPaths" PropertyName="OutputFolder"/>
</CombinePath>

<MakeDir Directories="$(OutputFolder)" />
<MakeDir Directories="$(OutputFolder)\Foo" />
<MakeDir Directories="$(OutputFolder)\Bar" />
于 2009-07-06T18:51:16.447 回答