From 7e006da63c0e393590a82bb457c6f4516e987e02 Mon Sep 17 00:00:00 2001
From: mrward <ward.matt@gmail.com>
Date: Sun, 20 Feb 2011 11:48:55 +0000
Subject: [PATCH] Add NuGet nuspec XML schema.

---
 data/schemas/nuspec.xsd | 58 +++++++++++++++++++++++++++++++++++++++++
 data/schemas/readme.txt |  6 +++++
 src/Setup/Files.wxs     |  3 +++
 src/Setup/Setup.wxs     |  1 +
 4 files changed, 68 insertions(+)
 create mode 100644 data/schemas/nuspec.xsd

diff --git a/data/schemas/nuspec.xsd b/data/schemas/nuspec.xsd
new file mode 100644
index 0000000000..bdab468847
--- /dev/null
+++ b/data/schemas/nuspec.xsd
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xs:schema id="nuspec"
+    targetNamespace="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"
+    elementFormDefault="qualified"
+    xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"
+    xmlns:mstns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"
+    xmlns:xs="http://www.w3.org/2001/XMLSchema"
+>
+    <xs:element name="package">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element name="metadata" maxOccurs="1" minOccurs="1">
+                    <xs:complexType>
+                        <xs:all>
+                            <xs:element name="id" maxOccurs="1" minOccurs="1" type="xs:string" />
+                            <xs:element name="version" maxOccurs="1" minOccurs="1" type="xs:string" />
+                            <xs:element name="title" maxOccurs="1" minOccurs="0" type="xs:string" />
+                            <xs:element name="authors" maxOccurs="1" minOccurs="1" type="xs:string" />
+                            <xs:element name="owners" maxOccurs="1" minOccurs="0" type="xs:string" />                            
+                            <xs:element name="licenseUrl" maxOccurs="1" minOccurs="0" type="xs:anyURI" />                                
+                            <xs:element name="projectUrl" maxOccurs="1" minOccurs="0" type="xs:anyURI" />                                
+                            <xs:element name="iconUrl" maxOccurs="1" minOccurs="0" type="xs:anyURI" />                                
+                            <xs:element name="requireLicenseAcceptance" maxOccurs="1" minOccurs="0" type="xs:boolean" />
+                            <xs:element name="description" maxOccurs="1" minOccurs="1" type="xs:string" />
+                            <xs:element name="summary" maxOccurs="1" minOccurs="0" type="xs:string" />
+                            <xs:element name="language" maxOccurs="1" minOccurs="0" type="xs:string" default="en-US" />
+                            <xs:element name="tags" maxOccurs="1" minOccurs="0" type="xs:string" />
+                            <xs:element name="dependencies" maxOccurs="1" minOccurs="0">
+                                <xs:complexType>
+                                    <xs:sequence>
+                                        <xs:element name="dependency" minOccurs="1" maxOccurs="unbounded">
+                                            <xs:complexType>
+                                                <xs:attribute name="id" type="xs:string" use="required" />
+                                                <xs:attribute name="version" type="xs:string" use="optional" />
+                                            </xs:complexType>
+                                        </xs:element>
+                                    </xs:sequence>
+                                </xs:complexType>
+                            </xs:element>
+                        </xs:all>
+                    </xs:complexType>
+                </xs:element>                
+                <xs:element name="files" minOccurs="0" maxOccurs="1">
+                    <xs:complexType>
+                        <xs:sequence>
+                            <xs:element name="file" minOccurs="1" maxOccurs="unbounded">
+                                <xs:complexType>
+                                    <xs:attribute name="src" use="required" type="xs:string" />
+                                    <xs:attribute name="target" use="optional" type="xs:string" />
+                                </xs:complexType>
+                            </xs:element>
+                        </xs:sequence>
+                    </xs:complexType>
+                </xs:element>
+            </xs:sequence>
+        </xs:complexType>
+    </xs:element>
+</xs:schema>
diff --git a/data/schemas/readme.txt b/data/schemas/readme.txt
index d187000482..896defab4e 100644
--- a/data/schemas/readme.txt
+++ b/data/schemas/readme.txt
@@ -27,6 +27,12 @@ NAnt 0.85 schema.
 http://nant.sourceforge.net/release/0.85/nant.xsd
 GNU General Public License.
 
+nuspec.xsd
+----------
+
+NuGet 1.1 schema
+Apache license 2.0 (http://nuget.codeplex.com/license)
+
 WiX schemas
 -----------
 
diff --git a/src/Setup/Files.wxs b/src/Setup/Files.wxs
index d774202d79..eb5d6281ee 100644
--- a/src/Setup/Files.wxs
+++ b/src/Setup/Files.wxs
@@ -667,6 +667,9 @@
 								<Component Guid="CA5C2E97-D332-4FA3-8782-50A3FC09FAC7" Id="WixGamingSchema" DiskId="1">
 									<File Source="..\..\data\schemas\gaming.xsd" Name="gaming.xsd" Id="schemas.wix.gaming.xsd" KeyPath="yes" />
 								</Component>
+								<Component Id="NuGetNuspecSchema" Guid="D45BFB38-1F09-48C2-B5E1-F1B1F073E4D1" DiskId="1">
+									<File Id="nuspec.xsd" Name="nuspec.xsd" Source="..\..\data\schemas\nuspec.xsd" KeyPath="yes" />
+								</Component>
 							</Directory>
 							<Directory Id="TemplatesFolder" Name="templates">
 								<Directory Id="FileTemplatesFolder" Name="file">
diff --git a/src/Setup/Setup.wxs b/src/Setup/Setup.wxs
index 2e8d00f73b..074f22fd8d 100644
--- a/src/Setup/Setup.wxs
+++ b/src/Setup/Setup.wxs
@@ -508,6 +508,7 @@
 				<ComponentRef Id="ITextSharpDll"/>
 			
 				<ComponentRef Id="NuGetCoreDll"/>
+				<ComponentRef Id="NuGetNuspecSchema"/>
 				<ComponentRef Id="NuGetLicenseTxt"/>
 				<ComponentRef Id="PackageManagementAddin"/>
 				<ComponentRef Id="PackageManagementDll"/>