使用nuspec.xsd验证.nuspec文件在'package'上失败

时间:2011-02-25 15:51:34

标签: xml validation schema nuget nuspec

我正在尝试验证以下xml,它位于.nuspec文件中:

<?xml version='1.0'?>
<package>
  <metadata>
    <id>nuspec_test</id>
    <version>1.2.3</version>
    <authors>Author Name</authors>
    <description>test_xml_document</description>
  </metadata>
</package>

对于验证,我使用的是此处的nuspec.xsd文件:http://nuget.codeplex.com/SourceControl/changeset/view/0881f2d55e70#src%2fCore%2fAuthoring%2fnuspec.xsd

我使用.Net的System.Xml运行验证,并使用Ruby的Nokogiri。这两个都表明在进行验证时失败了,说明如下:

来自Nokogiri:Element 'package': No matching global declaration available for the validation root.

来自System.XML:Data at the root level is invalid. Line 1, position 1.

导致验证错误的xml或架构出了什么问题?

3 个答案:

答案 0 :(得分:2)

如果你想让xsd验证,那么package元素应该在http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd命名空间中。

请注意,大多数示例都没有xml命名空间,因此只能将它用于您自己的用途。

答案 1 :(得分:1)

我认为你需要这个:&lt; package xmlns:xsi =“http://www.w3.org/2001/XMLSchema-instance”xmlns:xsd =“http://www.w3.org/2001/的XMLSchema“&GT;

请注意来自NuGet.codeplex.com的requied fields

以下是我工作的一个包的示例:

<?xml version="1.0"?>
<package xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <metadata>
    <id>SidePOP</id>
    <version>0.0.1.44</version>
    <authors>Rob Reynolds, Tim Hibbard</authors>
    <owners>Rob Reynolds</owners>
    <summary>SidePOP gives your app the ability to receive email</summary>
    <description>SidePOP allows your application the ability to receive email</description>
    <projectUrl>http://sidepop.googlecode.com</projectUrl>
    <licenseUrl>http://www.apache.org/licenses/LICENSE-2.0</licenseUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <tags>email</tags>
    <!--<iconUrl>32x32.png</iconUrl>-->
    <dependencies>
      <dependency id="log4net" version="1.2.10" />
    </dependencies>
  </metadata>
</package>

答案 2 :(得分:0)

请注意,如果从Codeplex中的源控制文件夹中获取xsd,则必须将任何出现的字符串“{0}”替换为“http://schemas.microsoft.com/packaging/2010/ 07 / nuspec.xsd“以便xsd在应用于您的nuspec文件时正常工作。

不要忘记将您的nuspec文件的根元素放在http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd命名空间中:

<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">