$ обозначает доступ к свойству (некоторая переменная, которая содержит простое значение)
@ для элемента, который обычно представляет собой группу файлов с прикрепленными метаданными под именем
% обозначает доступ к метаданным элемента. хорошо известные метаданные (например, 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