2013-10-22 113 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

您是否將這些文件作爲資源嵌入並在運行時使用它們?還是將它們複製爲輸出? –