Практическое руководство. Использование подстановочных знаков для построения всех файлов в каталоге
Обновлен: Ноябрь 2007
При создании проекта, содержащего несколько файлов, можно указывать каждый файл отдельно в файле проекта, а можно использовать знаки подстановки, чтобы включить все файлы в одном каталоге или наборе вложенных каталогов.
Указание входных данных
Входные данные для построения представлены в элементах. Дополнительные сведения об элементах см. в разделе Элементы MSBuild.
Чтобы включить файлы в построение, их необходимо включить в набор элементов в файле проекта MSBuild. Чтобы добавить в набор элементов несколько файлов, можно включать файлы по отдельности или использовать знаки подстановки, чтобы включить несколько файлов одновременно.
Объявление отдельных элементов
Используйте атрибуты Include следующим образом:
<CSFile Include="form1.cs"/>
– либо –
<VBFile Include="form1.vb"/>
Примечание. Если элементы, входящие в набор, не находятся в одном каталоге с файлом проекта, необходимо указать полный или относительный путь к элементу. Например, Include="..\..\form2.cs".
Объявление нескольких элементов
Используйте атрибуты Include следующим образом:
<CSFile Include="form1.cs;form2.cs"/>
– либо –
<VBFile Include="form1.vb;form2.vb"/>
Указание входных данных с помощью знаков подстановки
Знаки подстановки можно использовать для рекурсивного включения всех файлов или только определенных файлов из подкаталогов в качестве входных данных для построения. В приведенных далее примерах за основу взят проект, в котором содержатся графические файлы в следующих каталогах и подкаталогах (файл проекта находится в каталоге "Project"):
Project\Images\BestJpgs
Project\Images\ImgJpgs
Project\Images\ImgJpgs\Img1
Включение всех JPG-файлов в каталоге "Images" и подкаталогах
Используйте следующий атрибут Include:
Include="Images\\**\*.jpg"
Включение всех JPG-файлов, начинающихся со слога "img"
Используйте следующий атрибут Include:
Include="Images\**\img*.jpg"
Включение всех файлов в каталогах с именами, которые оканчиваются слогом "jpgs"
Используйте один из следующих атрибутов Include:
Include="Images\**\*jpgs\*.*"
– либо –
Include="Images\**\*jpgs\*"
Передача элементов в задачу
В файле проекта используйте запись @() в задачах, чтобы указать весь набор элементов в качестве входных данных для построения. Эту запись можно использовать при перечислении файлов по отдельности или при использовании знаков подстановки.
Использование всех файлов Visual C# или Visual Basic в качестве входных данных
Используйте атрибуты Include следующим образом:
<CSC Sources="@(CSFile)">...</CSC>
– либо –
<VBC Sources="@(VBFile)">...</VBC>
Примечание. |
---|
Чтобы указать входные данные для построения, необходимо использовать знаки подстановки в элементах; нельзя указать входные данные с помощью атрибута Sources в задаче MSBuild, такой как Csc или Vbc. Следующий пример недопустим в файле проекта: <CSC Sources="*.cs">...</CSC> |
Пример
В приведенном ниже примере кода показан проект, в котором все входные файлы включены по отдельности.
<Project DefaultTargets="Compile"
xmlns="https://schemas.microsoft.com/developer/msbuild/2003" >
<PropertyGroup>
<Builtdir>built</Builtdir>
</PropertyGroup>
<ItemGroup>
<CSFile Include="Form1.cs"/>
<CSFile Include="AssemblyInfo.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>
В приведенном ниже примере кода используется знак подстановки для включения всех CS-файлов.
<Project DefaultTargets="Compile"
xmlns="https://schemas.microsoft.com/developer/msbuild/2003" >
<PropertyGroup>
<builtdir>built</builtdir>
</PropertyGroup>
<ItemGroup>
<CSFile Include="*.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>
См. также
Задачи
Как собрать в каталоге все файлы, кроме одного