gpt4 book ai didi

.net - MSBuild 中的 @ 和 $ 和 % 有什么区别?

转载 作者:行者123 更新时间:2023-12-04 01:43:08 25 4
gpt4 key购买 nike

在 MSBuild 中引用变量时有何不同。例如在下面有一个 @$以及 %用过的。

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

最佳答案

$ 表示对属性的访问(某种包含简单值的变量)

@ 用于项目,通常是一组文件,在名称下附加元数据

% 表示对项目元数据的访问。有wellknown metadatas (如 RecursiveDir,参见 msdn 中的定义)自动附加到项目,或者您可以在定义项目时附加自己的元数据

假设您像这样定义@(files):

<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 包含文件 a/4.exe,@(Files) 是这样形成的
  • 文件 c:\source\1.txt,带有元数据
    颜色 = '蓝色' 和 RecursiveDir = ''
  • 文件 c:\source\b\2.dll,带有元数据
    颜色 = '蓝色' 和 RecursiveDir = 'b'
  • 文件 c:\source\c\3.xml,带有元数据
    颜色 = '蓝色' 和 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:\temps\c\3.xml
  • c:\temp\a\4.exe
  • 关于.net - MSBuild 中的 @ 和 $ 和 % 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6446018/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com