2011-06-22 32 views
6

当引用MSBuild中的变量时有什么区别。例如在下面有一个@$以及一个%使用。

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

回答

11

$表示一个属性(某种变量,它包含一个简单的值)

@是访问项目,通常是一组名称下附加元数据的文件

%表示对项目元数据的访问。有wellknown metadatas(如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:\源中包含的文件的1.txt,b/2.DLL,C/3.XML,和c:\源2包含/ 4.exe,@(文件)被这样

    形成
  • 文件c:\ source \ 1.txt,包含元数据 color ='Blue'和RecursiveDir =''

  • 文件c:\源\ B \ 2.DLL,与元数据的颜色 = '蓝' 和RecursiveDir = 'B'

  • 文件c:\源\ C \ 3.XML,带有元数据 颜色= '蓝' 和RecursiveDir = 'C'

  • 文件c:\源2 \一个\ 4.exe,与元数据 颜色= '红色' 和 RecursiveDir = 'A'

如果你定义了TempBui ldDir这样

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

你有一些类型的变量,它包含一个简单的值:C:\ TEMP

你的例子倒像是这样的:在项目文件中定义的每个文件复制在由形成目录将变量TempBuildDir的值与您找到该文件的递归目录连接起来。

你结束:

  • C:\ TEMP \ 1.txt的

  • C:\ TEMP \ B \ 2.DLL

  • C:\临时工\ C \ 3.xml

  • c:\ temp \ a \ 4。exe

+0

非常详细的答案谢谢。我会投票的次数超过允许的次数:) – 7wp

+0

不客气;) –

相关问题