2011-06-22 62 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

不客氣;) –

相關問題