2009-07-06 3 views
0

Bei der Überarbeitung unseres Deployment-Prozesses bin ich hinübergegangen, um ein MSBuild-Projekt anstelle unserer bestehenden Batch-Dateien zu verwenden. Alle wichtigen Elemente sind vorhanden, und ich wollte einen oder zwei Schritte aussparen, aber es gab einen Haken.MSBuild Ärger (oder eklatante Ignoranz meinerseits)

Ich erstelle eine Eigenschaft namens OutputPath mit der CombinePath-Aufgabe, und obwohl ich nach der Erstellung ohne Probleme darauf zugreifen kann, weiß ich nicht, wie ich sie zu meinem Vorteil nutzen kann. Berücksichtigen Sie:

Die Befehle 2 und 3 schlagen fehl, weil ich ein Array verweise und versuche, mit einer Zeichenfolge zu verketten. Das Erstellen einer Eigenschaft und das Zuweisen von @ (OutputFolder) führt einfach zu einer anderen Elementgruppe, nicht zu einer Eigenschaft, die ich mit dem $ accessor referenzieren kann. Ich habe eine hässliche Workaround, aber ich würde gerne etwas aufräumen.

Danke,

-José

Antwort

1

Doh! Definitiv Ignoranz, verwendete das falsche Attribut für das Ausgabeelement.

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

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

Ich bin mir nicht sicher, ob die Antwort genau, aber hier ist eine Idee:

<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)" /> 

Wesentliches, wenn Sie erstellen output Artikel mit dem Weg werden sie nur in die Liste angehängt werden. Dies müsste in einem Element btw sein, und Sie müssen Include = "" verwenden.