2011-06-22 39 views
6

¿Cuáles son las diferencias cuando se hace referencia a variables en MSBuild? Por ejemplo, en lo que sigue hay un @ y $ y también un % utilizado.

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

Respuesta

11

$ denota el acceso a una propiedad (algún tipo de variable que contiene un valor simple)

@ es para elemento, que normalmente es un grupo de archivos con metadatos adjuntos con un nombre

% denota un acceso a un metadato de un elemento. Hay wellknown metadatas (como RecursiveDir, véase la definición en MSDN) unida de forma automática a un elemento, o se puede adjuntar su propia metadatos cuando defina sus artículos

digamos que usted defina @ (archivos) de esta manera:

<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: \ archivos de origen contiene 1.txt, b/2.dll, c/3.xml, y c: \ source2 contiene un/4.exe, @ (archivos) se forma como esto

  • archivo c: \ source \ 1.txt, con metadatos color = 'Azul' y RecursiveDir = ''

  • archivo c: \ source \ b \ 2.dll, con metadatos color = 'Blue' y RecursiveDir = 'b'

  • archivo c: \ source \ c \ 3.xml, con metadatos color = 'Blue' y RecursiveDir = 'c'

  • archivo c: \ source2 \ a \ 4.exe, con color de metadatos = 'Roja' y RecursiveDir = 'a'

Si defines TempBui ldDir como esto

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

Usted tiene algún tipo de variable que contiene un valor simple: c: \ temp

Sus ejemplos lee así: copiar todos los archivos definidos en el número de archivos en un directorio que está formado por valor de concabulación de la variable DirDirectorio de la variable con el directorio recursivo donde encontraste el archivo.

Se termina con:

  • c: \ temp \ 1.txt

  • c: \ temp \ b \ 2.dll

  • c: \ temps \ c \ 3.xml

  • c: \ temp \ a \ 4.exe

+0

Gran respuesta detallada gracias. Yo votaría esto más veces que la permitida :) – 7wp

+0

De nada;) –

Cuestiones relacionadas