В чем разница между @ и $ и% в MSBuild? - PullRequest
9 голосов
/ 23 июня 2011

В чем различия при обращении к переменным в MSBuild. Например, в следующем примере используются @ и $, а также %.

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

Ответы [ 2 ]

15 голосов
/ 23 июня 2011

$ обозначает доступ к свойству (некоторая переменная, которая содержит простое значение)

@ для элемента, который обычно представляет собой группу файлов с прикрепленными метаданными под именем

% обозначает доступ к метаданным элемента. хорошо известные метаданные (например, RecursiveDir, см. Определение в msdn) автоматически присоединяются к элементу, или вы можете прикрепить свои собственные метаданные при определении своих элементов

скажем, вы определяете @ (файлы), например:

<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>

, если c: \ source содержит файлы 1.txt, b / 2.dll, c / 3.xml, а c: \ source2 содержит / 4.exe, @(Файлы) формируется так:

  • файл c: \ source \ 1.txt, с метаданными color = 'Blue' и RecursiveDir = ''

  • файл c: \ source \ b \ 2.dll, метаданные color = 'Blue' и RecursiveDir = 'b'

  • файл c: \ source \ c \ 3.xml, с метаданными color = 'Blue' и RecursiveDir = 'c'

  • файл c: \ source2 \ a \ 4.exe, с метаданными color = 'Red' и RecursiveDir = 'a '

Если вы определите TempBuildDir следующим образом

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

У вас есть какая-то переменная, которая содержит простое значение: c: \ temp

Ваши примеры выглядят так: скопируйте все файлы, определенные в item Файл в каталоге, который сформирован путем объединения значения переменной TempBuildDir с рекурсивным каталогом, в котором вы нашли файл.

В результате вы получите:

  • c: \temp \ 1.txt

  • c: \ temp \ b \ 2.dll

  • c: \ temps \ c \ 3.xml

  • c: \ temp \ a \ 4.exe

5 голосов
/ 23 июня 2011

Вот полный список специальных символов:

http://msdn.microsoft.com/en-us/library/bb383819.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...