0

我在 Visual Studio 中使用 XSD,但结果与预期不符。

我对一个元素有一个独特的约束。当我故意通过引入重复来破坏 Xml 时,intellisense 会突出显示错误,但是当它让我编译和运行代码时,没有进一步的事情发生,并且错误被允许级联。

是否有可能我错过了任何事情或做错了什么,或者这是就 XSD 中的错误验证而言?

    public static T CreateClassFromXml<T>(string path, string root, XmlReaderSettings settings)
        where T : class
    {
        path.ThrowNullOrEmpty("path");
        settings.ThrowNull("settings");

        File.Exists(path).ThrowFalse(string.Format("'{0}' could not be found", path));

        var serializer = new XmlSerializer(typeof(T), new XmlRootAttribute() { ElementName = root });

        using (var reader = XmlReader.Create(path, settings))
        {
            return (T)serializer.Deserialize(reader);
        }
    }

调用代码:

        var xsd = context.Server.MapPath(Paths.Xml + "Wikis.xsd");
        File.Exists(xsd).ThrowFalse(string.Format("'{0}' could not be found", xsd));

        var settings = new XmlReaderSettings();
        settings.Schemas.Add(null, xsd);
        settings.ValidationType = ValidationType.Schema;

        var xml = context.Server.MapPath(Paths.Xml + "Wikis.xml");
        var metaList = XmlHelper.CreateClassFromXml<List<WikiMeta>>(xml, "AllMeta", settings);
4

1 回答 1

0

这完全取决于您希望 Visual Studio 对您的 XML 文件做什么。您需要发布更多详细信息,从 VS 版本开始,然后在单击作为项目的一部分的 XML 文件时看到的属性;例如,什么是构建操作?您是否设置了自定义工具?什么是自定义工具?如果您只是想确保 XML 文件在项目中发布时是有效的,那么您要么依赖于进行验证的自定义工具,要么您可以使用构建事件等。

这是一个可用于在构建过程中构建自定义验证的示例。设置您的工具路径并通过某种机制传递参数...参数可以是您希望验证的实际文件,或者它可以包含文件位置和关联 XSD 位置的列表...将考虑除零以外的任何退出代码一个错误(因此您的构建可能会停止)。将此 XML 添加为项目文件的一部分,或在项目属性编辑器中使用适当的 UI。

<PropertyGroup>
    <Tool Condition="'$(Tool)' == ''">"full path to your exe"</Tool>
    <ToolParams>"$(ProjectDir)$(TargetName).xml"</ToolParams>
</PropertyGroup>
<Target Name="AfterCompile">
    <Exec Condition=" '$(RunTool)' == 'true' " Command="$(Tool) /parms:$(ToolParms)"/>
</Target>
于 2013-10-22T13:08:44.500 回答