XSD Schema for Project Files

The following is the schema for a Visual C++ project file. You can use this schema to validate your .vcproj files:

<?xml version="1.0" encoding="utf-8" ?>
<xs:schema xmlns:xs="https://www.w3.org/2001/XMLSchema">
    <xs:element name="VisualStudioProject" type="VisualStudioProjectType" />
    <xs:complexType name="ConfigurationType">
        <xs:sequence>
            <xs:element name="Tool" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:attribute name="Name" type="xs:string" use="required" />
                    <!-- NOTE: all other attributes are properties of that particular tool object. -->
                    <!--       any unrecognized attribute will be ignored. -->
                    <xs:anyAttribute processContents="skip" />
                </xs:complexType>
            </xs:element>
            <xs:element name="DeploymentTool" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                    <!-- NOTE: all other attributes are properties of that particular tool object. -->
                    <!--       any unrecognized attribute will be ignored. -->
                    <xs:anyAttribute processContents="skip" />
                </xs:complexType>
            </xs:element>
            <xs:element name="DebuggerTool" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                    <!-- NOTE: all other attributes are properties of that particular tool object. -->
                    <!--       any unrecognized attribute will be ignored. -->
                    <xs:anyAttribute processContents="skip" />
                </xs:complexType>
            </xs:element>
        </xs:sequence>
        <xs:attribute name="Name" type="xs:string" use="required" />
        <!-- NOTE: all other attributes are properties of that particular configuration object. -->
        <!--       any unrecognized attribute will be ignored. -->
        <xs:anyAttribute processContents="skip" />
    </xs:complexType>
    <xs:complexType name="FilterType">
        <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element name="Filter" type="FilterType" />
            <xs:element name="File" type="FileType" />
        </xs:choice>
        <xs:attribute name="Name" type="xs:string" use="required" />
        <!-- NOTE: all other attributes are properties of that particular filter object. -->
        <!--       any unrecognized attribute will be ignored. -->
        <xs:anyAttribute processContents="skip" />
    </xs:complexType>
    <xs:complexType name="FileType">
        <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element name="File" type="FileType" />
            <xs:element name="FileConfiguration" type="ConfigurationType" />
        </xs:choice>
        <xs:attribute name="RelativePath" type="xs:string" use="required" />
        <!-- NOTE: all other attributes are properties of that particular file object. -->
        <!--       any unrecognized attribute will be ignored. -->
        <xs:anyAttribute processContents="skip" />
    </xs:complexType>
    <xs:complexType name="VisualStudioProjectType">
        <xs:sequence>
            <xs:element name="Platforms" minOccurs="1" maxOccurs="1">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="Platform" minOccurs="1" maxOccurs="unbounded">
                            <xs:complexType>
                                <!-- NOTE: the following attribute must match an existing platform on the system. -->
                                <xs:attribute name="Name" type="xs:string" use="required" />
                            </xs:complexType>
                        </xs:element>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="ToolFiles" minOccurs="0" maxOccurs="1">
                <xs:complexType>
                    <xs:choice minOccurs="0" maxOccurs="unbounded">
                        <xs:element name="ToolFile" minOccurs="0" maxOccurs="unbounded">
                            <xs:complexType>
                                <xs:attribute name="RelativePath" type="xs:string" use="required" />
                            </xs:complexType>
                        </xs:element>
                        <xs:element name="DefaultToolFile" minOccurs="0" maxOccurs="unbounded">
                            <xs:complexType>
                                <xs:attribute name="FileName" type="xs:string" use="required" />
                            </xs:complexType>
                        </xs:element>
                    </xs:choice>
                </xs:complexType>
            </xs:element>
            <xs:element name="PublishingData" minOccurs="0" maxOccurs="1">
                <xs:complexType>
                    <!-- NOTE: all child elements are items of the publishing data -->
                    <!--       any unrecognized attribute will be ignored. -->
                    <xs:choice minOccurs="0" maxOccurs="unbounded">
                        <xs:element name="PublishingItem" minOccurs="0" maxOccurs="unbounded">
                            <xs:complexType>
                                <xs:anyAttribute processContents="skip" />
                            </xs:complexType>
                        </xs:element>
                    </xs:choice>
                    <!-- NOTE: all other attributes are properties of the publishing project object. -->
                    <!--       any unrecognized attribute will be ignored. -->
                    <xs:anyAttribute processContents="skip" />
                </xs:complexType>
            </xs:element>
            <xs:element name="Configurations" minOccurs="1" maxOccurs="1">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="Configuration" minOccurs="1" maxOccurs="unbounded" type="ConfigurationType" />
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="References" minOccurs="0" maxOccurs="1">
                <xs:complexType>
                    <xs:choice minOccurs="0" maxOccurs="unbounded">
                        <xs:element name="AssemblyReference">
                            <xs:complexType>
                                <xs:sequence>
                                    <xs:element name="ReferenceConfiguration" minOccurs="0" maxOccurs="unbounded" type="ConfigurationType" />
                                </xs:sequence>
                                <xs:attribute name="RelativePath" type="xs:string" use="required" />
                                <xs:attribute name="AssemblyName" type="xs:string" use="optional" />
                                <xs:attribute name="CopyLocal" type="xs:string" use="optional" />
                                <xs:attribute name="CopyLocalDependencies" type="xs:boolean" use="optional" default="true" />
                                <xs:attribute name="CopyLocalSatelliteAssemblies" type="xs:boolean" use="optional" default="true" />
                                <xs:attribute name="UseInBuild" type="xs:boolean" use="optional" default="true" />
                                <xs:attribute name="UseDependenciesInBuild" type="xs:boolean" use="optional" default="true" />
                                <xs:attribute name="SubType" type="xs:string" use="optional" />
                                <xs:attribute name="MinFrameworkVersion" type="xs:string" />
                            </xs:complexType>
                        </xs:element>
                        <xs:element name="ProjectReference">
                            <xs:complexType>
                                <xs:sequence>
                                    <xs:element name="ReferenceConfiguration" minOccurs="0" maxOccurs="unbounded" type="ConfigurationType" />
                                </xs:sequence>
                                <xs:attribute name="ReferencedProjectIdentifier" type="xs:string" use="required" />
                                <xs:attribute name="Name" type="xs:string" use="optional" />
                                <xs:attribute name="CopyLocal" type="xs:string" use="optional" />
                                <xs:attribute name="CopyLocalDependencies" type="xs:boolean" use="optional" default="true" />
                                <xs:attribute name="CopyLocalSatelliteAssemblies" type="xs:boolean" use="optional" default="true" />
                                <xs:attribute name="UseInBuild" type="xs:boolean" use="optional" default="true" />
                                <xs:attribute name="UseDependenciesInBuild" type="xs:boolean" use="optional" default="true" />
                                <xs:attribute name="RelativePathToProject" type="xs:string" use="optional" />
                            </xs:complexType>
                        </xs:element>
                        <xs:element name="ActiveXReference">
                            <xs:complexType>
                                <xs:sequence>
                                    <xs:element name="ReferenceConfiguration" minOccurs="0" maxOccurs="unbounded" type="ConfigurationType" />
                                </xs:sequence>
                                <xs:attribute name="ControlGUID" type="xs:string" use="required" />
                                <xs:attribute name="ControlVersion" type="xs:float" use="required" />
                                <xs:attribute name="LocaleID" type="xs:string" use="optional" />
                                <xs:attribute name="WrapperTool" type="xs:string" use="optional" />
                                <xs:attribute name="CopyLocal" type="xs:string" use="optional" />
                                <xs:attribute name="CopyLocalDependencies" type="xs:boolean" use="optional" default="true" />
                                <xs:attribute name="CopyLocalSatelliteAssemblies" type="xs:boolean" use="optional" default="true" />
                                <xs:attribute name="UseInBuild" type="xs:boolean" use="optional" default="true" />
                                <xs:attribute name="UseDependenciesInBuild" type="xs:boolean" use="optional" default="true" />
                            </xs:complexType>
                        </xs:element>
                    </xs:choice>
                </xs:complexType>
            </xs:element>
            <xs:element name="Files" minOccurs="0" maxOccurs="1">
                <xs:complexType>
                    <xs:choice minOccurs="0" maxOccurs="unbounded">
                        <xs:element name="Filter" type="FilterType" />
                        <xs:element name="File" type="FileType" />
                    </xs:choice>
                </xs:complexType>
            </xs:element>
            <xs:element name="Globals" minOccurs="0" maxOccurs="1">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="Global" minOccurs="0" maxOccurs="unbounded">
                            <xs:complexType>
                                <xs:attribute name="Name" type="xs:string" use="required" />
                                <xs:attribute name="Value" type="xs:string" use="required" />
                            </xs:complexType>
                        </xs:element>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
        <!-- NOTE: the ProjectType attribute is only for readability. -->
        <xs:attribute name="ProjectType" type="xs:string" fixed="Visual C++" use="optional" />
        <xs:attribute name="Version" use="optional" default="7.00">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:enumeration value="7.00" />
                    <xs:enumeration value="7,00" />
                    <xs:enumeration value="7.10" />
                    <xs:enumeration value="7,10" />
                    <xs:enumeration value="8.00" />
                    <xs:enumeration value="8,00" />
                    <xs:enumeration value="9.00" />
                    <xs:enumeration value="9,00" />
                </xs:restriction>
            </xs:simpleType>
        </xs:attribute>
        <!-- NOTE: if the ProjectGUID attribute is missing, a new GUID will be generated. -->
        <xs:attribute name="ProjectGUID" type="xs:string" use="optional" />
        <xs:attribute name="RootNamespace" type="xs:string" use="optional" />
        <xs:attribute name="Keyword" type="xs:string" use="optional" />
        <!-- NOTE: if the Name attribute is missing, one will be created based on the .vcproj filename. -->
        <xs:attribute name="Name" type="xs:string" use="optional" />
        <xs:attribute name="AssemblyReferenceSearchPaths" type="xs:string" use="optional" />
          <xs:attribute name="ManifestKeyFile" type="xs:string" use="optional" />
        <xs:attribute name="ManifestCertificateThumbprint" type="xs:string" use="optional" />
        <xs:attribute name="ManifestTimestampURL" type="xs:string" use="optional" />
        <xs:attribute name="SignManifests" type="xs:boolean" use="optional" />
        <xs:attribute name="SignAssembly" type="xs:boolean" use="optional" />
        <xs:attribute name="AssemblyOriginatorKeyFile" type="xs:string" use="optional" />
        <xs:attribute name="DelaySign" type="xs:boolean" use="optional" />
        <xs:attribute name="GenerateManifests" type="xs:boolean" use="optional" />
        <xs:attribute name="TargetZone" type="xs:string" use="optional" />
        <xs:attribute name="ExcludedPermissions" type="xs:string" use="optional" />
        <xs:attribute name="TargetFrameworkVersion" type="xs:string" />

        <!-- NOTE: all other attributes matched as project properties will be applied. -->
        <!--       any unrecognized attribute will be ignored. -->
        <xs:anyAttribute processContents="skip" />
    </xs:complexType>
</xs:schema>

See Also

Reference

Modifying Project Settings