包括在MSBuild中单独指定目录的文件

包括在MSBuild中单独指定目录的文件,msbuild,Msbuild,这看起来应该很简单,但我无法从参考资料中计算出来,而且我的google fu显然很弱 我只想在构建文件中分别指定文件名和基本文件夹 <?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <TestFile

这看起来应该很简单,但我无法从参考资料中计算出来,而且我的google fu显然很弱

我只想在构建文件中分别指定文件名和基本文件夹

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <TestFilesWithFolder>
      B:\Root\Test1.*;
      B:\Root\Test2.*
    </TestFilesWithFolder>
    <TestFiles>Test1.*;Test2.*</TestFiles>
    <TestFileRoot>B:\Root</TestFileRoot>
  </PropertyGroup>
  <Target Name="Build">
    <ItemGroup>
      <TestFilesGroupWithFolder Include="$(TestFilesWithFolder)" />
      <TestFilesGroup Include="$(TestFileRoot)\$(TestFiles)" />
    </ItemGroup>
    <Warning Text="Source files with folder: @(TestFilesGroupWithFolder)" />
    <Warning Text="Source files: @(TestFilesGroup)" />
  </Target>
</Project>

B:\Root\Test1.*;
B:\Root\Test2*
测试1.*;测试2*
B:\Root
当我运行此命令时,第一个警告将按预期显示两个文件,但第二个警告仅显示第一个文件(因为直接字符串concat将文件夹名称放在第一个文件上,而不是第二个文件上)


如何使ItemGroup“TestFileGroup”同时包含给定“TestFiles”和“TestFileRoot”属性的文件?

可以将分号分隔的事物列表转换为一个项,这将使这成为可能,但属性中的项包含通配符,因此,如果希望MSBuild将它们视为列表中的项,则在MSBuild首次看到它们时,路径必须有效。也许有办法做到这一点,但我想不出一个办法。换句话说

<ItemGroup>
    <TestFiles Include="$(TestFiles)" />
</ItemGroup>

可以将以分号分隔的事物列表转换为项,这将使这成为可能,但属性中的项包含通配符除外,因此,如果希望MSBuild将它们视为列表中的项,则在MSBuild首次看到它们时,路径必须有效。也许有办法做到这一点,但我想不出一个办法。换句话说

<ItemGroup>
    <TestFiles Include="$(TestFiles)" />
</ItemGroup>

谢谢你非常详细的回答。我花了一段时间才弄明白这些模式是如何相互关联的,但我现在已经开始工作了。谢谢你提供了非常详细的答案。我花了一段时间才弄明白这些模式是如何相互关联的,但我现在已经开始工作了。
(Build target) ->
d:\Code\My.proj(80,5): warning : Source files with folder:
   D:\Code\Test1.txt;D:\Code\Test2.txt
d:\Code\My.proj(84,5): warning : Source files:
   D:\Code\Test1.txt;D:\Code\Test2.txt