在MSBuild中引用变量时有什么区别。例如,下面有一个@
和$
以及一个%
。
<Copy SourceFiles="@(Files)" DestinationFolder="$(TempBuildDir)\%(RecursiveDir)">
<Output TaskParameter="CopiedFiles" ItemName="DeployFiles" />
</Copy>
答案 0 :(得分:15)
$表示对属性的访问(某种包含简单值的变量)
@是for item,通常是一组名为
的附加元数据的文件%表示访问项目的元数据。自动附加到项目的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:\ source包含文件1.txt,b / 2.dll,c / 3.xml和c:\ source2包含/ 4.exe,@(Files)就像这样形成
文件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,带 元数据颜色='红色'和 RecursiveDir ='a'
如果你像这样定义TempBuildDir
<PropertyGroup>
<TempBuildDir>c:\temp<TempBuildDir>
</PropertyGroup>
您有某种包含简单值的变量:c:\ temp
您的示例如下所示:将项目File中定义的每个文件复制到一个目录中,该目录是通过将变量TempBuildDir的值与您找到该文件的Recursive目录相连接而形成的。
你最终得到:
C:\ TEMP \ 1.txt的
C:\ TEMP \ B \ 2.DLL
C:\临时工\ C \ 3.XML
C:\ TEMP \一个\ 4.exe
答案 1 :(得分:5)
以下是特殊字符的完整列表: