<?xml version="1.0" encoding="utf-8"?>
<xs:schema targetNamespace="http://schemas.microsoft.com/developer/msbuild/2003" xmlns:msb="http://schemas.microsoft.com/developer/msbuild/2003" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <!-- ======================================================================================= -->
    <xs:element name="Project">
         <xs:annotation>
            <xs:documentation><!-- _locID_text="Project" _locComment="" -->Проект MSBuild</xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:group ref="msb:ProjectLevelTagExceptTargetOrImportType" minOccurs="0" maxOccurs="unbounded"/>
                <!-- must be at least one Target or Import tag-->
                <xs:group ref="msb:TargetOrImportType"/>
                <xs:group ref="msb:ProjectLevelTagType" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
            <xs:attribute name="DefaultTargets" type="xs:string" use="optional">
                <xs:annotation>
                    <xs:documentation><!-- _locID_text="Project_DefaultTargets" _locComment="" -->Необязательный список из одного или нескольких объектов, которые будут построены, если другие объекты не указаны (разделитель - точка с запятой)</xs:documentation>
                </xs:annotation>
            </xs:attribute>
            <xs:attribute name="InitialTargets" type="xs:string" use="optional">
                <xs:annotation>
                    <xs:documentation><!-- _locID_text="Project_InitialTargets" _locComment="" -->Необязательный список объектов, которые всегда должны быть построены перед любыми другими объектами (разделитель - точка с запятой)</xs:documentation>
                </xs:annotation>
            </xs:attribute>
            <xs:attribute name="Sdk" type="xs:string" use="optional">
                <xs:annotation>
                    <xs:documentation><!-- _locID_text="Project_Sdk" _locComment="" -->Необязательная строка, описывающая пакеты SDK MSBuild, необходимые для сборки проекта</xs:documentation>
                </xs:annotation>
            </xs:attribute>
            <xs:attribute name="ToolsVersion" type="xs:string" use="optional">
                <xs:annotation>
                    <xs:documentation><!-- _locID_text="Project_ToolsVersion" _locComment="" -->Необязательная строка, описывающая версию набора инструментов, необходимую для нормального построения проекта.</xs:documentation>
                </xs:annotation>
            </xs:attribute>
        </xs:complexType>
    </xs:element>
    <!-- ======================================================================================= -->
    <xs:group name="ProjectLevelTagExceptTargetOrImportType">
        <xs:choice>
            <xs:element name="PropertyGroup" type="msb:PropertyGroupType"/>
            <xs:element name="ItemGroup" type="msb:ItemGroupType"/>
            <xs:element name="ItemDefinitionGroup" type="msb:ItemDefinitionGroupType"/>
            <xs:element name="Choose" type="msb:ChooseType"/>
            <xs:element name="UsingTask" type="msb:UsingTaskType"/>
            <xs:element name="ProjectExtensions" type="msb:ProjectExtensionsType"/>
        </xs:choice>
    </xs:group>
    <!-- ======================================================================================= -->    
    <xs:group name="ProjectLevelTagType">
        <xs:choice>
            <xs:element name="PropertyGroup" type="msb:PropertyGroupType"/>
            <xs:element name="ItemGroup" type="msb:ItemGroupType"/>
            <xs:element name="ItemDefinitionGroup" type="msb:ItemDefinitionGroupType"/>
            <xs:element name="Choose" type="msb:ChooseType"/>
            <xs:element name="UsingTask" type="msb:UsingTaskType"/>
            <xs:element name="Target" type="msb:TargetType"/>
            <xs:element name="Import" type="msb:ImportType"/>
            <xs:element name="ImportGroup" type="msb:ImportGroupType"/>
            <xs:element name="ProjectExtensions" type="msb:ProjectExtensionsType"/>
        </xs:choice>
    </xs:group>
    <!-- ======================================================================================= -->
    <xs:group name="TargetOrImportType">
        <xs:choice>
            <xs:element name="Target" type="msb:TargetType"/>
            <xs:element name="Import" type="msb:ImportType"/>
            <xs:element name="ImportGroup" type="msb:ImportGroupType"/>
        </xs:choice>
    </xs:group>    
    <!-- ======================================================================================= -->        
    <xs:complexType name="TargetType">
        <xs:annotation>
            <xs:documentation><!-- _locID_text="TargetType" _locComment="" -->Группирует задачи в секцию процесса сборки</xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:sequence>
                <xs:choice minOccurs="0" maxOccurs="unbounded">
                    <xs:element ref="msb:Task"/>
                    <xs:element name="PropertyGroup" type="msb:PropertyGroupType"/>
                    <xs:element name="ItemGroup" type="msb:ItemGroupType"/>
                </xs:choice>
            </xs:sequence>
            <xs:element name="OnError" type="msb:OnErrorType" minOccurs="0" maxOccurs="unbounded"/>
            <!-- no elements are allowed under Target after an OnError element-->
        </xs:sequence>
        <xs:attribute name="Name" type="msb:non_empty_string" use="required">
            <xs:annotation>
                <xs:documentation><!-- _locID_text="TargetType_Name" _locComment="" -->Имя объекта</xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="DependsOnTargets" type="xs:string" use="optional">
            <xs:annotation>
                <xs:documentation><!-- _locID_text="TargetType_DependsOnTargets" _locComment="" -->Необязательный список объектов, которые должны быть выполнены перед этим объектом (разделитель - точка с запятой)</xs:documentation>
            </xs:annotation>
        </xs:attribute>            
        <xs:attribute name="Inputs" type="xs:string" use="optional">
            <xs:annotation>
                <xs:documentation><!-- _locID_text="TargetType_Inputs" _locComment="" -->Необязательный список файлов, составляющих входные данные для этого объекта (разделитель - точка с запятой). Чтобы определить, не устарел ли объект, будет выполнено сравнение отметок времени этих файлов и файлов в выходных данных.</xs:documentation>
            </xs:annotation>
        </xs:attribute>                
        <xs:attribute name="Outputs" type="xs:string" use="optional">
            <xs:annotation>
                <xs:documentation><!-- _locID_text="TargetType_Outputs" _locComment="" -->Необязательный список файлов, составляющих выходные данные для этого объекта (разделитель - точка с запятой). Чтобы определить, не устарел ли объект, будет выполнено сравнение отметок времени этих файлов и файлов во входных данных.</xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="Condition" type="xs:string" use="optional">
            <xs:annotation>
                <xs:documentation><!-- _locID_text="TargetType_Condition" _locComment="" -->Необязательное выражение для определения, должен ли запускаться данный объект и объекты, от которых он зависит</xs:documentation>
            </xs:annotation>
        </xs:attribute>            
        <xs:attribute name="KeepDuplicateOutputs" type="xs:string" use="optional">
            <xs:annotation>
                <xs:documentation><!-- _locID_text="TargetType_KeepDuplicateOutputs" _locComment="" -->Необязательное выражение для определения, следует ли удалять повторные элементы в возвращаемых данных объекта перед их возвращением. По умолчанию повторные элементы не удаляются.</xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="Returns" type="xs:string" use="optional">
            <xs:annotation>
                <xs:documentation><!-- _locID_text="TargetType_Returns" _locComment="" -->Необязательное выражение для определения, какие элементы, создаваемые объектом, должны возвращаться объектом. Если в файле отсутствуют атрибуты Returns для Targets, вместо них для этой цели используются атрибуты Outputs.</xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="BeforeTargets" type="xs:string" use="optional">
            <xs:annotation>
                <xs:documentation><!-- _locID_text="TargetType_BeforeTargets" _locComment="" -->Необязательный список объектов, которые должны быть выполнены этим объектом до своего выполнения (разделитель - точка с запятой).</xs:documentation>
            </xs:annotation>
        </xs:attribute>   
        <xs:attribute name="AfterTargets" type="xs:string" use="optional">
            <xs:annotation>
                <xs:documentation><!-- _locID_text="TargetType_AfterTargets" _locComment="" -->Необязательный список объектов, которые должны быть выполнены этим объектом после своего выполнения (разделитель - точка с запятой).</xs:documentation>
            </xs:annotation>
        </xs:attribute>     
        <xs:attribute name="Label" type="xs:string" use="optional">
            <xs:annotation>
                <xs:documentation><!-- _locID_text="ImportType_Label" _locComment="" -->Необязательное выражение. Используется для определения или упорядочения системных и пользовательских элементов</xs:documentation>
            </xs:annotation>
        </xs:attribute>
    </xs:complexType>
    <!-- ======================================================================================= -->        
    <xs:complexType name="PropertyGroupType">
        <xs:annotation>
            <xs:documentation><!-- _locID_text="PropertyGroupType" _locComment="" -->Группирует определения свойств</xs:documentation>
        </xs:annotation>
        <xs:sequence minOccurs="0" maxOccurs="unbounded">
            <xs:element ref="msb:Property"/>
        </xs:sequence>
        <xs:attribute name="Condition" type="xs:string" use="optional">
            <xs:annotation>
                <xs:documentation><!-- _locID_text="PropertyGroupType_Condition" _locComment="" -->Необязательное выражение для определения, следует ли использовать PropertyGroup</xs:documentation>
            </xs:annotation> 
        </xs:attribute>     
        <xs:attribute name="Label" type="xs:string" use="optional">
            <xs:annotation>
                <xs:documentation><!-- _locID_text="PropertyGroupType_Label" _locComment="" -->Необязательное выражение. Используется для определения или упорядочения системных и пользовательских элементов</xs:documentation>
            </xs:annotation>
        </xs:attribute>
    </xs:complexType>
    <!-- ======================================================================================= -->        
    <xs:complexType name="ImportGroupType">
        <xs:annotation>
            <xs:documentation><!-- _locID_text="ImportGroupType" _locComment="" -->Группирует определения импортов</xs:documentation>
        </xs:annotation>
        <xs:sequence minOccurs="0" maxOccurs="unbounded">
          <xs:element name="Import" type="msb:ImportType"/>
        </xs:sequence>
        <xs:attribute name="Condition" type="xs:string" use="optional">
            <xs:annotation>
                <xs:documentation><!-- _locID_text="ImportGroupType_Condition" _locComment="" -->Необязательное выражение для определения, следует ли использовать ImportGroup</xs:documentation>
            </xs:annotation> 
        </xs:attribute>     
        <xs:attribute name="Label" type="xs:string" use="optional">
            <xs:annotation>
                <xs:documentation><!-- _locID_text="ImportGroupType_Label" _locComment="" -->Необязательное выражение. Используется для определения или упорядочения системных и пользовательских элементов</xs:documentation>
            </xs:annotation>
        </xs:attribute>
    </xs:complexType>
    <!-- ======================================================================================= -->        
    <xs:complexType name="ItemGroupType">
        <xs:annotation>
            <xs:documentation><!-- _locID_text="ItemGroupType" _locComment="" -->Группирует определения списков элементов</xs:documentation>
        </xs:annotation>        
        <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element ref="msb:Item"/>
            <xs:element name="Link" type="msb:LinkItem"/>
            <xs:element name="ResourceCompile" type="msb:ResourceCompile"/>
            <xs:element name="PreBuildEvent" type="msb:PreBuildEventItem"/>
            <xs:element name="PostBuildEvent" type="msb:PostBuildEventItem"/>
        </xs:choice>
        <xs:attribute name="Condition" type="xs:string" use="optional">
            <xs:annotation>
                <xs:documentation><!-- _locID_text="ItemGroupType_Condition" _locComment="" -->Необязательное выражение для определения, следует ли использовать ItemGroup</xs:documentation>
            </xs:annotation>
        </xs:attribute>     
        <xs:attribute name="Label" type="xs:string" use="optional">
            <xs:annotation>
                <xs:documentation><!-- _locID_text="ItemGroupType_Label" _locComment="" -->Необязательное выражение. Используется для определения или упорядочения системных и пользовательских элементов</xs:documentation>
            </xs:annotation>
        </xs:attribute>
    </xs:complexType>
    <!-- ======================================================================================= -->        
    <xs:complexType name="ItemDefinitionGroupType">
        <xs:annotation>
            <xs:documentation><!-- _locID_text="ItemDefinitionGroupType" _locComment="" -->Группирует определения метаданных элементов</xs:documentation>
        </xs:annotation>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element ref="msb:Item"/>
            <xs:element name="Link" type="msb:LinkItem"/>
            <xs:element name="ResourceCompile" type="msb:ResourceCompile"/>
            <xs:element name="PreBuildEvent" type="msb:PreBuildEventItem"/>
            <xs:element name="PostBuildEvent" type="msb:PostBuildEventItem"/>
        </xs:choice>
        <xs:attribute name="Condition" type="xs:string" use="optional">
          <xs:annotation>
             <xs:documentation><!-- _locID_text="ItemDefinitionGroupType_Condition" _locComment="" -->Необязательное выражение для определения, следует ли использовать ItemDefinitionGroup</xs:documentation>
          </xs:annotation>
        </xs:attribute>
        <xs:attribute name="Label" type="xs:string" use="optional">
            <xs:annotation>
                <xs:documentation><!-- _locID_text="ItemDefinitionGroupType_Label" _locComment="" -->Необязательное выражение. Используется для определения или упорядочения системных и пользовательских элементов</xs:documentation>
            </xs:annotation>
        </xs:attribute>
    </xs:complexType>
    <!-- ======================================================================================= -->
    <xs:complexType name="ChooseType">
        <xs:annotation>
            <xs:documentation><!-- _locID_text="ChooseType" _locComment="" -->Группирует элементы When и Otherwise</xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="When" type="msb:WhenType" maxOccurs="unbounded"/>
            <xs:element name="Otherwise" type="msb:OtherwiseType" minOccurs="0"/>
        </xs:sequence>
        <xs:attribute name="Label" type="xs:string" use="optional">
            <xs:annotation>
                <xs:documentation><!-- _locID_text="ChooseType_Label" _locComment="" -->Необязательное выражение. Используется для определения или упорядочения системных и пользовательских элементов</xs:documentation>
            </xs:annotation>
        </xs:attribute>
    </xs:complexType>
    <!-- ======================================================================================= -->
    <xs:complexType name="WhenType">
        <xs:annotation>
            <xs:documentation><!-- _locID_text="WhenType" _locComment="" -->Группирует элементы PropertyGroup и (или) ItemGroup</xs:documentation>
        </xs:annotation>
        <xs:sequence minOccurs="0" maxOccurs="unbounded">
            <xs:choice>
                <xs:element name="PropertyGroup" type="msb:PropertyGroupType"/>
                <xs:element name="ItemGroup" type="msb:ItemGroupType"/>
                <xs:element name="Choose" type="msb:ChooseType"/>
            </xs:choice>
        </xs:sequence>
        <xs:attribute name="Condition" type="xs:string" use="required">
            <xs:annotation>
                <xs:documentation><!-- _locID_text="WhenType_Condition" _locComment="" -->Чтобы определить, должны ли использоваться дочерние группы PropertyGroup и/или элементы ItemGroup, вычислено дополнительное выражение</xs:documentation>
            </xs:annotation>
        </xs:attribute>
    </xs:complexType>
    <!-- ======================================================================================= -->
    <xs:complexType name="OtherwiseType">
        <xs:annotation>
            <xs:documentation><!-- _locID_text="OtherwiseType" _locComment="" -->Группирует PropertyGroup и (или) элементы ItemGroup, используемые, если ни одно из условий для дочерних элементов When не вычисляется как true</xs:documentation>
        </xs:annotation>        
        <xs:sequence minOccurs="0" maxOccurs="unbounded">
            <xs:choice>
                <xs:element name="PropertyGroup" type="msb:PropertyGroupType"/>
                <xs:element name="ItemGroup" type="msb:ItemGroupType"/>
                <xs:element name="Choose" type="msb:ChooseType"/>
            </xs:choice>
        </xs:sequence>
    </xs:complexType>
    <!-- ======================================================================================= -->        
    <xs:complexType name="OnErrorType">
        <xs:annotation>
            <xs:documentation><!-- _locID_text="OnErrorType" _locComment="" -->Задает объекты для выполнения при появлении исправимой ошибки</xs:documentation>
        </xs:annotation>
        <xs:attribute name="Condition" type="xs:string" use="optional">
            <xs:annotation>
                <xs:documentation><!-- _locID_text="OnErrorType_Condition" _locComment="" -->Необязательное выражение для определения, следует ли выполнять объекты</xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="ExecuteTargets" type="msb:non_empty_string" use="required">
            <xs:annotation>
                <xs:documentation><!-- _locID_text="OnErrorType_ExecuteTargets" _locComment="" -->Список объектов для выполнения (разделитель - точка с запятой)</xs:documentation>
            </xs:annotation>
        </xs:attribute>    
        <xs:attribute name="Label" type="xs:string" use="optional">
            <xs:annotation>
                <xs:documentation><!-- _locID_text="ImportType_Label" _locComment="" -->Необязательное выражение. Используется для определения или упорядочения системных и пользовательских элементов</xs:documentation>
            </xs:annotation>
        </xs:attribute>        
    </xs:complexType>
    <!-- ======================================================================================= -->    
    <xs:complexType name="UsingTaskType">
      <xs:annotation>
        <xs:documentation><!-- _locID_text="UsingTaskType" _locComment="" -->Определяет сборку, содержащую реализацию задачи, или непосредственно содержит реализацию.</xs:documentation>
      </xs:annotation>
      <xs:sequence>
        <xs:element name="ParameterGroup" type="msb:ParameterGroupType" minOccurs="0" maxOccurs="1"/>
        <xs:element name="Task" type="msb:UsingTaskBodyType" minOccurs="0" maxOccurs="1"/>    
      </xs:sequence> 
        <xs:attribute name="Condition" type="xs:string" use="optional">
            <xs:annotation>
                <xs:documentation><!-- _locID_text="UsingTaskType_Condition" _locComment="" -->Необязательное выражение для определения, следует ли вычислить объявление</xs:documentation>
            </xs:annotation>
        </xs:attribute>          
        <xs:attribute name="AssemblyName" type="msb:non_empty_string" use="optional">
            <xs:annotation>
                <xs:documentation><!-- _locID_text="UsingTaskType_AssemblyName" _locComment="" -->Необязательное имя сборки, содержащей задачу. Необходимо использовать AssemblyName или AssemblyFile</xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="AssemblyFile" type="msb:non_empty_string" use="optional">
            <xs:annotation>
                <xs:documentation><!-- _locID_text="UsingTaskType_AssemblyFile" _locComment="" -->Необязательный путь сборки, содержащей задачу. Необходимо использовать AssemblyName или AssemblyFile</xs:documentation>
            </xs:annotation>
        </xs:attribute>            
        <xs:attribute name="TaskName" type="msb:non_empty_string" use="required">
            <xs:annotation>
                <xs:documentation><!-- _locID_text="UsingTaskType_TaskName" _locComment="" -->Имя класса задачи в сборке</xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="TaskFactory" type="msb:non_empty_string" use="optional">
          <xs:annotation>
            <xs:documentation><!-- _locID_text="UsingTaskType_TaskFactory" _locComment="" -->Имя класса фабрики задач в сборке</xs:documentation>
          </xs:annotation>
        </xs:attribute>
        <xs:attribute name="Architecture" type="msb:architecture" use="optional">
          <xs:annotation>
            <xs:documentation>
              <!-- _locID_text="UsingTaskType_Architecture" _locComment="" -->Определяет архитектуру сервера задач, на котором должна выполняться эта задача. В настоящее время поддерживаются следующие значения: x86, x64, CurrentArchitecture и * (any).  Если архитектура не задана, задача будет выполняться в процессе MSBuild, или сервер задач будет запущен с использованием архитектуры родительского процесса MSBuild
            </xs:documentation>
          </xs:annotation>
        </xs:attribute>
        <xs:attribute name="Runtime" type="msb:runtime" use="optional">
          <xs:annotation>
            <xs:documentation>
              <!-- _locID_text="UsingTaskType_Runtime" _locComment="" -->Определяет версию среды выполнения .NET сервера задач, на котором должна выполняться эта задача. В настоящее время поддерживаются следующие значения: CLR2, CLR4, CurrentRuntime и * (any).  Если среда выполнения не задана, задача будет выполняться в процессе MSBuild, или сервер задач будет запущен с использованием среды выполнения родительского процесса MSBuild
            </xs:documentation>
          </xs:annotation>
        </xs:attribute>
    </xs:complexType> 
    <!-- ======================================================================================= -->
    <xs:complexType name="ParameterGroupType">
        <xs:annotation>
            <xs:documentation><!-- _locID_text="ParameterGroupType" _locComment="" -->Параметры группы, являющиеся частью определения встроенной задачи.</xs:documentation>
        </xs:annotation> 
        <!-- ParameterGroup contains parameter elements whose element names are the parameter names.
             Attributes are:
                  * ParameterType. Optional string. Type of the task parameter. Defaults to string type.
                  * Output. Optional bool. Whether this task parameter can be retrieved as an output. Defaults to false.
                  * Required. Optional bool. Whether this task parameter is required to be passed a value. Defaults to false.
             It is not possible to validate attributes on elements with undefined names using XSD.
          -->
        <xs:sequence minOccurs="0" maxOccurs="unbounded">
           <xs:any processContents="skip"/>
        </xs:sequence>
    </xs:complexType>     
    <!-- ======================================================================================= -->
    <xs:complexType name="UsingTaskBodyType" mixed="true">
        <xs:annotation>
            <xs:documentation><!-- _locID_text="UsingTaskBodyType" _locComment="" -->Содержит реализацию встроенной задачи. Содержимое непрозрачно для MSBuild.</xs:documentation>
        </xs:annotation>
        <xs:sequence minOccurs="0" maxOccurs="unbounded">
            <xs:any namespace="##any" processContents="skip"/>
        </xs:sequence>        
        <xs:attribute name="Evaluate" type="msb:boolean" use="optional">
            <xs:annotation>
                <xs:documentation><!-- _locID_text="UsingTaskBodyType_Evaluate" _locComment="" -->Должны ли свойства тела развертываться перед использованием. Значение по умолчанию - "false".</xs:documentation>
            </xs:annotation>
        </xs:attribute>        
    </xs:complexType>     
    <!-- ======================================================================================= -->  
    <xs:complexType name="ImportType">
        <xs:annotation>
            <xs:documentation><!-- _locID_text="ImportType" _locComment="" -->Объявляет, что содержимое файла другого проекта должно быть помещено в данном месте</xs:documentation>
        </xs:annotation>        
        <xs:attribute name="Condition" type="xs:string" use="optional">
            <xs:annotation>
                <xs:documentation><!-- _locID_text="ImportType_Condition" _locComment="" -->Необязательное выражение для определения, следует ли выполнять импорт</xs:documentation>
            </xs:annotation>
        </xs:attribute>              
        <xs:attribute name="Project" type="msb:non_empty_string" use="required">
            <xs:annotation>
                <xs:documentation><!-- _locID_text="ImportType_Project" _locComment="" -->Файл проекта для импорта</xs:documentation>
            </xs:annotation>
        </xs:attribute>     
        <xs:attribute name="Label" type="xs:string" use="optional">
            <xs:annotation>
                <xs:documentation><!-- _locID_text="ImportType_Label" _locComment="" -->Необязательное выражение. Используется для определения или упорядочения системных и пользовательских элементов</xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="Sdk" type="xs:string" use="optional">
            <xs:annotation>
                <xs:documentation>
                    <!-- _locID_text="ImportType_Sdk" _locComment="" -->Имя пакета SDK, который содержит файл проекта для импорта</xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="Version" type="xs:string" use="optional">
            <xs:annotation>
                <xs:documentation>
                    <!-- _locID_text="ImportType_Version" _locComment="" -->Необязательное выражение для указания версии пакета SDK, на который ссылается эта операция импорта</xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="MinimumVersion" type="xs:string" use="optional">
            <xs:annotation>
                <xs:documentation>
                    <!-- _locID_text="ImportType_MinimumVersion" _locComment="" -->Необязательное выражение для указания минимальной версии пакета SDK, которую требует ссылающаяся операция импорта</xs:documentation>
            </xs:annotation>
        </xs:attribute>
    </xs:complexType>
    <!-- ======================================================================================= -->  
    <xs:complexType name="ProjectExtensionsType" mixed="true">
        <xs:annotation>
            <xs:documentation><!-- _locID_text="ProjectExtensionsType" _locComment="" -->Необязательная секция, используемая главными узлами MSBuild, который может содержать произвольное содержимое XML, игнорируемое в MSBuild</xs:documentation>
        </xs:annotation>
        <xs:sequence minOccurs="0" maxOccurs="unbounded">
            <xs:any processContents="skip"/>
        </xs:sequence>
    </xs:complexType>    
    <!-- ======================================================================================= -->
    <xs:element name="Item" type="msb:SimpleItemType" abstract="true"/>
    <!-- ======================================================================================= -->   
    <!-- convenience type for items that have no meta-data-->
    <!-- note this allows Remove or no attribute instead of Include, which is too lax outside of Targets at present, but 
         it's the best we can reasonably do with an XSD -->
    <xs:complexType name="SimpleItemType">
        <xs:attribute name="Condition" type="xs:string" use="optional">
            <xs:annotation>
                <xs:documentation><!-- _locID_text="SimpleItemType_Condition" _locComment="" -->Необязательное выражение для определения, следует ли вычислить элементы</xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="Include" type="xs:string" use="optional">
            <xs:annotation>
                <xs:documentation><!-- _locID_text="SimpleItemType_Include" _locComment="" -->Разделенный точками с запятой список имен файлов (знаки подстановки разрешены) или других элементов, которые требуется включить в данный список элементов</xs:documentation>
            </xs:annotation>
        </xs:attribute>             
        <xs:attribute name="Exclude" type="xs:string" use="optional">
            <xs:annotation>
                <xs:documentation><!-- _locID_text="SimpleItemType_Exclude" _locComment="" -->Разделенный точками с запятой список имен файлов (знаки подстановки разрешены) или других элементов, которые требуется удалить из списка включаемых элементов</xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="Remove" type="xs:string" use="optional">
            <xs:annotation>
                <xs:documentation><!-- _locID_text="SimpleItemType_Remove" _locComment="" -->Разделенный точками с запятой список имен файлов (знаки подстановки разрешены) или других элементов, которые требуется удалить из существующего списка элементов</xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="Update" type="xs:string" use="optional">
            <xs:annotation>
                <xs:documentation><!-- _locID_text="SimpleItemType_Remove" _locComment="" -->Разделенный точками с запятой список файлов (знаки подстановки разрешены) или других имен элементов, в которые необходимо добавить метаданные из этого XML-элемента</xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="Label" type="xs:string" use="optional">
          <xs:annotation>
            <xs:documentation>
              <!-- _locID_text="ImportGroupType_Label" _locComment="" -->Необязательное выражение. Используется для определения или упорядочения системных и пользовательских элементов
            </xs:documentation>
          </xs:annotation>
        </xs:attribute>
    </xs:complexType>
    <!-- ======================================================================================= -->      
    <!-- general utility type allowing an item type to be defined but not its child meta-data-->
    <xs:complexType name="GenericItemType">
        <xs:complexContent>
            <xs:extension base="msb:SimpleItemType">
                <xs:sequence minOccurs="0" maxOccurs="unbounded">
                    <xs:any namespace="##any" processContents="skip"/>  
                </xs:sequence>      
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <!-- ======================================================================================= -->  
    <!-- no type declared on this abstract element, so either a simple or complex type can be substituted for it.-->
    <xs:element name="Property" abstract="true"/>
    <!-- ======================================================================================= -->      
    <!-- convenience type for properties that just want to allow text and no elements in them-->
    <xs:complexType name="StringPropertyType">
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute name="Condition" type="xs:string" use="optional">
                    <xs:annotation>
                        <xs:documentation><!-- _locID_text="StringPropertyType_Condition" _locComment="" -->Необязательное выражение для определения, следует ли вычислить свойство</xs:documentation>
                    </xs:annotation>
                </xs:attribute>
                <xs:attribute name="Label" type="xs:string" use="optional">
                  <xs:annotation>
                    <xs:documentation>
                      <!-- _locID_text="ImportGroupType_Label" _locComment="" -->Необязательное выражение. Используется для определения или упорядочения системных и пользовательских элементов
                    </xs:documentation>
                  </xs:annotation>
                </xs:attribute>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <!-- ======================================================================================= -->      
    <!-- general utility type allowing text and/or elements inside-->
    <xs:complexType name="GenericPropertyType" mixed="true">
        <xs:sequence minOccurs="0" maxOccurs="unbounded">
            <xs:any namespace="##any" processContents="skip"/>
        </xs:sequence>
        <xs:attribute name="Condition" type="xs:string" use="optional">
            <xs:annotation>
                <xs:documentation><!-- _locID_text="GenericPropertyType_Condition" _locComment="" -->Необязательное выражение для определения, следует ли вычислить свойство</xs:documentation>
            </xs:annotation>         
        </xs:attribute>
        <xs:attribute name="Label" type="xs:string" use="optional">
          <xs:annotation>
            <xs:documentation>
              <!-- _locID_text="ImportGroupType_Label" _locComment="" -->Необязательное выражение. Используется для определения или упорядочения системных и пользовательских элементов
            </xs:documentation>
          </xs:annotation>
        </xs:attribute>
    </xs:complexType>
    <!-- ======================================================================================= -->
    <xs:element name="Task" type="msb:TaskType" abstract="true"/>
    <!-- ======================================================================================= -->
    <xs:complexType name="TaskType">
        <xs:sequence minOccurs="0" maxOccurs="unbounded">
            <xs:element name="Output">
                <xs:annotation>
                    <xs:documentation><!-- _locID_text="TaskType_Output" _locComment="" -->Необязательный элемент, задающий конкретный тип выходных данных для сбора</xs:documentation>
                </xs:annotation>
                <xs:complexType>
                    <xs:attribute name="TaskParameter" type="msb:non_empty_string" use="required">
                        <xs:annotation>
                            <xs:documentation><!-- _locID_text="TaskType_Output_TaskParameter" _locComment="" -->Параметр задачи для сбора. Соответствует имени .NET Property для класса задачи, имеющего атрибут [Output]</xs:documentation>
                        </xs:annotation>
                    </xs:attribute>
                    <xs:attribute name="ItemName" type="msb:non_empty_string" use="optional">
                        <xs:annotation>
                            <xs:documentation><!-- _locID_text="TaskType_Output_ItemName" _locComment="" -->Необязательное имя списка элементов для размещения собранных выходных данных. Необходимо указать ItemName или PropertyName</xs:documentation>
                        </xs:annotation>
                    </xs:attribute>
                    <xs:attribute name="PropertyName" type="msb:non_empty_string" use="optional">
                        <xs:annotation>
                            <xs:documentation><!-- _locID_text="TaskType_Output_PropertyName" _locComment="" -->Необязательное имя свойства для размещения собранных выходных данных. Необходимо указать PropertyName или ItemName</xs:documentation>
                        </xs:annotation>
                    </xs:attribute>
                    <xs:attribute name="Condition" type="xs:string" use="optional">
                        <xs:annotation>
                            <xs:documentation><!-- _locID_text="TaskType_Output_Condition" _locComment="" -->Необязательное выражение для определения, следует ли собирать выходные данные</xs:documentation>
                        </xs:annotation>
                    </xs:attribute>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
        <xs:attribute name="Condition" type="xs:string" use="optional">
            <xs:annotation>
                <xs:documentation><!-- _locID_text="TaskType_Condition" _locComment="" -->Необязательное выражение для определения, следует ли выполнять задачу</xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="ContinueOnError" type="msb:boolean" use="optional">
            <xs:annotation>
                <xs:documentation><!-- _locID_text="TaskType_ContinueOnError" _locComment="" -->Необязательное логическое значение, указывающее, следует ли игнорировать исправимую ошибку задачи. По умолчанию: false</xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="Architecture" type="msb:architecture" use="optional">
          <xs:annotation>
            <xs:documentation>
              <!-- _locID_text="TaskType_Architecture" _locComment="" -->Определяет разрядность задачи, если она должна выполняться именно в 32- или 64-разрядном процессе. Если разрядность не задана, задача будет выполняться с разрядностью родительского процесса. Если в UsingTask задано несколько задач с одинаковым именем, но с разными значениями атрибута Architecture, для поиска и выбора нужной задачи будет использоваться указанное здесь значение атрибута Architecture
            </xs:documentation>
          </xs:annotation>
        </xs:attribute>
        <xs:attribute name="Runtime" type="msb:runtime" use="optional">
          <xs:annotation>
            <xs:documentation>
              <!-- _locID_text="TaskType_Runtime" _locComment="" -->Определяет среду выполнения .NET задачи. Это значение следует обязательно задавать, если задача должна выполняться в конкретной версии среды выполнения .NET. Если атрибут не задан, задача будет выполняться в среде выполнения, использовавшейся процессом построения. Если в UsingTask задано несколько задач с одинаковым именем, но с разными значениями атрибута Runtime, для поиска и выбора нужной задачи будет использоваться указанное здесь значение атрибута Runtime
            </xs:documentation>
          </xs:annotation>
        </xs:attribute>
        <!-- We don't need the anyAttribute here because other types deriving from this type will add the right attributes.-->
    </xs:complexType>
    <!-- ======================================================================================= -->  
    <!-- XSD considers an empty-valued attribute to satisfy use="required", but we want it to have a non-empty value in most cases, hence this utility type. -->
    <xs:simpleType name="non_empty_string">
        <xs:restriction base="xs:string">
            <xs:minLength value="1"/>
        </xs:restriction>
    </xs:simpleType>
    <!-- This type causes intellisense to suggest "true" or "false", but doesn't actually constrain the value beyond msb:non_empty_string.
    We can't constrain the value, because the project author might want to pass a property or item instead of a literal value.
    Besides, MSBuild will accept other literal values, like "on" and "off", just as well. -->
    <xs:simpleType name="boolean">
        <xs:union memberTypes="msb:non_empty_string">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:enumeration value="true"/>
                    <xs:enumeration value="false"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:union>
    </xs:simpleType>
    <!-- Similar trick for Importance -->
    <xs:simpleType name="importance">
        <xs:union memberTypes="msb:non_empty_string">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:enumeration value="high"/>
                    <xs:enumeration value="normal"/>
                    <xs:enumeration value="low"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:union>
    </xs:simpleType>
    <!-- Similar trick for Architecture -->
    <xs:simpleType name="architecture">
      <xs:union memberTypes="msb:non_empty_string">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="*"/>
            <xs:enumeration value="CurrentArchitecture"/>
            <xs:enumeration value="x86"/>
            <xs:enumeration value="x64"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:union>
    </xs:simpleType>
    <!-- Similar trick for Runtime -->
    <xs:simpleType name="runtime">
      <xs:union memberTypes="msb:non_empty_string">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="*"/>
            <xs:enumeration value="CurrentRuntime"/>
            <xs:enumeration value="CLR2"/>
            <xs:enumeration value="CLR4"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:union>
    </xs:simpleType>
    <!-- ======================================================================================= -->  
    <!-- These types are used to enable Tasks and TaskItems global elements to exist in the schema. 
         They cannot both be declared as "Link" Elements of differing types in global scope. -->
    <xs:complexType name="LinkItem">
      <xs:complexContent>
        <xs:extension base="msb:SimpleItemType">
          <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element name="AdditionalDependencies"/>
            <xs:element name="OutputFile"/>
            <xs:element name="AssemblyDebug"/>
            <xs:element name="SubSystem"/>
            <xs:element name="ShowProgress"/>
            <xs:element name="GenerateDebugInformation"/>
            <xs:element name="EnableCOMDATFolding"/>
            <xs:element name="OptimizeReferences"/>
            <xs:element name="Version"/>
            <xs:element name="Driver"/>
            <xs:element name="RandomizedBaseAddress"/>
            <xs:element name="SuppressStartupBanner"/>
            <xs:element name="AdditionalLibraryDirectories"/>
            <xs:element name="Profile"/>
            <xs:element name="LinkStatus"/>
            <xs:element name="FixedBaseAddress"/>
            <xs:element name="DataExecutionPrevention"/>
            <xs:element name="SwapRunFromCD"/>
            <xs:element name="SwapRunFromNET"/>
            <xs:element name="RegisterOutput"/>
            <xs:element name="AllowIsolation"/>
            <xs:element name="EnableUAC"/>
            <xs:element name="UACExecutionLevel"/>
            <xs:element name="UACUIAccess"/>
            <xs:element name="PreventDllBinding"/>
            <xs:element name="IgnoreStandardIncludePath"/>
            <xs:element name="GenerateMapFile"/>
            <xs:element name="IgnoreEmbeddedIDL"/>
            <xs:element name="TypeLibraryResourceID"/>
            <xs:element name="LinkErrorReporting"/>
            <xs:element name="MapExports"/>
            <xs:element name="TargetMachine"/>
            <xs:element name="TreatLinkerWarningAsErrors"/>
            <xs:element name="ForceFileOutput"/>
            <xs:element name="CreateHotPatchableImage"/>
            <xs:element name="SpecifySectionAttributes"/>
            <xs:element name="MSDOSStubFileName"/>
            <xs:element name="IgnoreAllDefaultLibraries"/>
            <xs:element name="IgnoreSpecificDefaultLibraries"/>
            <xs:element name="ModuleDefinitionFile"/>
            <xs:element name="AddModuleNamesToAssembly"/>
            <xs:element name="EmbedManagedResourceFile"/>
            <xs:element name="ForceSymbolReferences"/>
            <xs:element name="DelayLoadDLLs"/>
            <xs:element name="AssemblyLinkResource"/>
            <xs:element name="AdditionalManifestDependencies"/>
            <xs:element name="StripPrivateSymbols"/>
            <xs:element name="MapFileName"/>
            <xs:element name="MinimumRequiredVersion"/>
            <xs:element name="HeapReserveSize"/>
            <xs:element name="HeapCommitSize"/>
            <xs:element name="StackReserveSize"/>
            <xs:element name="StackCommitSize"/>
            <xs:element name="LargeAddressAware"/>
            <xs:element name="TerminalServerAware"/>
            <xs:element name="FunctionOrder"/>
            <xs:element name="ProfileGuidedDatabase"/>
            <xs:element name="LinkTimeCodeGeneration"/>
            <xs:element name="MidlCommandFile"/>
            <xs:element name="MergedIDLBaseFileName"/>
            <xs:element name="TypeLibraryFile"/>
            <xs:element name="EntryPointSymbol"/>
            <xs:element name="BaseAddress"/>
            <xs:element name="ProgramDatabaseFile"/>
            <xs:element name="SupportUnloadOfDelayLoadedDLL"/>
            <xs:element name="SupportNobindOfDelayLoadedDLL"/>
            <xs:element name="ImportLibrary"/>
            <xs:element name="MergeSections"/>
            <xs:element name="CLRThreadAttribute"/>
            <xs:element name="CLRImageType"/>
            <xs:element name="KeyFile"/>
            <xs:element name="KeyContainer"/>
            <xs:element name="DelaySign"/>
            <xs:element name="CLRUnmanagedCodeCheck"/>
            <xs:element name="SectionAlignment"/>
            <xs:element name="CLRSupportLastError"/>
            <xs:element name="ImageHasSafeExceptionHandlers"/>
          </xs:choice>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="ResourceCompile">
      <xs:complexContent>
        <xs:extension base="msb:SimpleItemType">
          <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element name="Culture"/>
            <xs:element name="PreprocessorDefinitions"/>
            <xs:element name="UndefinePreprocessorDefinitions"/>
            <xs:element name="AdditionalIncludeDirectories"/>
            <xs:element name="IgnoreStandardIncludePath"/>
            <xs:element name="ShowProgress"/>
            <xs:element name="NullTerminateStrings"/>
            <xs:element name="SuppressStartupBanner"/>
            <xs:element name="ResourceOutputFileName"/>
          </xs:choice>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="PreBuildEventItem">
      <xs:complexContent>
        <xs:extension base="msb:SimpleItemType">
            <xs:choice minOccurs="0" maxOccurs="unbounded">
              <xs:element name="Message"/>
              <xs:element name="Command"/>
            </xs:choice>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="PostBuildEventItem">
      <xs:complexContent>
        <xs:extension base="msb:SimpleItemType">
            <xs:choice minOccurs="0" maxOccurs="unbounded">
              <xs:element name="Message"/>
              <xs:element name="Command"/>
            </xs:choice>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
</xs:schema>
