2013-10-22 75 views
0

我在Visual Studio中使用了XSD,但结果与预期不符。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

这一切都取决于你有什么期望的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> 
+0

我正在使用VS 2010 pro。没有太多的建设事件等经验,所以我不知道从哪里开始。我已经设法使用更新的代码得到一个结果(运行时错误)。 – dotnetnoob

+0

您是否将这些文件作为资源嵌入并在运行时使用它们?还是将它们复制为输出? –