如何:在一个目录中生成所有文件,只有一个文件除外
更新:2007 年 11 月
在项目文件中,可以使用通配符将一个目录或一组嵌套目录中的所有文件都包括在某个生成的输入列表中。但是,您可能不希望将目录中的某个文件或一组嵌套目录中的某个目录包括在某个生成的输入列表中。这时,您可以从输入列表中显式排除该文件或该目录。此外,您也可能希望只在特定条件下包括项目中的某个文件。这时,您可以显式声明在生成中包括文件的条件。
从某个生成的输入列表中排除一个文件或目录
项集合是某个生成的输入文件。使用 Include 属性,既可以分别声明要包括的各个项,也可以将这些项作为一个组来声明。例如:
<CSFile Include="Form1.cs"/>
<CSFile Include ="File1.cs;File2.cs"/>
<CSFile Include="*.cs"/>
<JPGFile Include="Images\**\*.jpg"/>
如果您已使用通配符将一个目录或一组嵌套目录中的所有文件都包括在某个生成任务的输入中,您现在可能不希望包括该目录中的一个或多个文件,或这组嵌套目录中的某个目录。若要从项集合中排除一项,请使用 Exclude 属性。
包括除 Form2 以外的所有 .cs 或 .vb 文件
使用以下 Include 和 Exclude 属性之一:
<CSFile Include="*.cs" Exclude="Form2.cs"/>
- 或 -
<VBFile Include="*.vb" Exclude="Form2.vb"/>
包括除 Form2 和 Form3 以外的所有 .cs 或 .vb 文件
使用以下 Include 和 Exclude 属性之一:
<CSFile Include="*.cs" Exclude="Form2.cs;Form3.cs"/>
- 或 -
<VBFile Include="*.vb" Exclude="Form2.vb;Form3.vb"/>
包括 Images 目录的子目录中的所有 .jpg 文件,Version2 目录中的文件除外
使用下面的 Include 和 Exclude 属性:
<JPGFile Include="Images\**\*.jpg" Exclude = "Images\**\Version2\*.jpg"/>
说明: 必须指定两个属性的路径。如果在 Include 属性中使用绝对路径指定文件位置,则在 Exclude 属性中也必须使用绝对路径;如果在 Include 属性中使用相对路径,则在 Exclude 属性中也必须使用相对路径。
使用条件从某个生成的输入列表中排除一个文件或目录
如果希望包括某些项(例如,在调试版本而不是发布版本中),则可以使用 Condition 属性来指定包括项的条件。
仅在发布版本中包括文件 Formula.vb
使用 Condition 属性,如下所示:
<Compile Include="Formula.vb" Condition=" '$(Configuration)' == 'Release' " />
示例
下面的代码示例将用目录中除了 Form2.cs 以外的所有 .cs 文件来生成项目。
<Project DefaultTargets="Compile"
xmlns="https://schemas.microsoft.com/developer/msbuild/2003" >
<PropertyGroup>
<builtdir>built</builtdir>
</PropertyGroup>
<ItemGroup>
<CSFile Include="*.cs Exclude="Form2.cs"/>
<Reference Include="System.dll"/>
<Reference Include="System.Data.dll"/>
<Reference Include="System.Drawing.dll"/>
<Reference Include="System.Windows.Forms.dll"/>
<Reference Include="System.XML.dll"/>
</ItemGroup>
<Target Name="PreBuild">
<Exec Command="if not exist $(builtdir) md $(builtdir)"/>
</Target>
<Target Name="Compile" DependsOnTargets="PreBuild">
<Csc Sources="@(CSFile)"
References="@(Reference)"
OutputAssembly="$(builtdir)\$(MSBuildProjectName).exe"
TargetType="exe" />
</Target>
</Project>