2011-06-22 4 views
6

Quelles sont les différences lorsque vous faites référence à des variables dans MSBuild. Par exemple dans ce qui suit il y a un @ et $ et aussi un % utilisé.

<Copy SourceFiles="@(Files)" DestinationFolder="$(TempBuildDir)\%(RecursiveDir)"> 
    <Output TaskParameter="CopiedFiles" ItemName="DeployFiles" /> 
</Copy> 

Répondre

11

$ désigne l'accès à une propriété (une sorte de variable qui contient une simple valeur)

@ est pour item, qui est généralement un groupe de fichiers avec des métadonnées attachées sous un nom

% désignent un accès à une métadonnée d'un élément. Il y a wellknown metadatas (comme RecursiveDir, voir la définition dans msdn) fixé automatiquement à un élément, ou vous pouvez joindre vos propres métadonnées lorsque vous définissez vos articles

permet de dire que vous définissez @ (fichiers) comme ceci:

<ItemGroup> 
    <Files include='c:\source\**\*.*'> <!-- all files in all subfolder in c:\source --> 
    <Color>Blue</Color> <!-- attach metadata color = 'Blue' to these files --> 
    </Files> 
    <Files include='c:\source2\**\*.*'> <!-- all files in all subfolder in c:\source2 --> 
    <Color>Red</Color> <!-- attach metadata color = 'Red' to these files --> 
    </Files> 
</ItemGroup> 

si c: \ source contient des fichiers 1.txt, b/2.dll, c/3.xml, et c: \ source2 contient un/4.exe, @ (fichiers) est formé comme celui-ci

  • fichier c: \ source \ 1.txt, avec les métadonnées color = 'Bleu' et RecursiveDir = ''

  • fichier C: \ source de \ b \ 2.dll, avec des métadonnées color = 'Blue' et RecursiveDir = 'b'

  • fichier C: \ source de \ c \ 3.xml, avec des métadonnées color = 'Blue' et RecursiveDir = 'c'

  • fichier c: \ source2 \ a \ 4.exe, avec métadonnées couleur = 'rouge' et RecursiveDir = 'a'

Si vous définissez TempBui ldDir comme celui-ci

<PropertyGroup> 
<TempBuildDir>c:\temp<TempBuildDir> 
</PropertyGroup> 

Vous avez une sorte de variable qui contient une valeur simple: c: \ temp

Vos exemples se lit comme ceci: copier tous les fichiers définis au point fichier dans un répertoire qui est formé par concaténation de la variable TempBuildDir avec le répertoire Recursive où vous avez trouvé le fichier.

Vous vous retrouvez avec:

  • c: \ temp \ 1.txt

  • c: \ temp \ b \ 2.dll

  • c: \ temps \ c \ 3.xml

  • c: \ temp \ a \ 4.exe

+0

Grande réponse détaillée merci. Je voterais ceci plus de fois que celui permis :) – 7wp

+0

De rien;) –

Questions connexes