Esquema XSD para arquivos de projeto
Veja a seguir o esquema para um arquivo de projeto do Visual C++.Você pode usar este esquema para validar os arquivos .vcproj:
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema xmlns:xs="http://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>