我在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);
答案 0 :(得分: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>