我正在尝试从pack中添加到一个XMLSchemaSet中,并得到以下错误:
引发的异常:“System.NotSupportedException”在System.dll中
附加信息: URI前缀无法识别。
下面是代码:
Dim XML = XDocument.Parse("<Product></Product>")
Dim Schemas As New XmlSchemaSet()
Schemas.Add("", "pack://application:,,,/MyAssemblyName;component/Resources/XSD Resources/Product.xsd")
XML.Validate(Schemas, Sub(sender As Object, e As ValidationEventArgs) Console.WriteLine(e.Message))从本地路径加载XSD没有任何问题,但是这些XSD需要与应用程序一起打包。我这里的包URI怎么了?
发布于 2017-04-21 19:24:45
您可以指定一个自定义XmlResolver,并提供一个知道如何加载"pack:“URI的实现:
Dim XML = XDocument.Parse("<Product></Product>")
Dim Schemas As New XmlSchemaSet()
Schemas.XmlResolver = New CustomResolver()
Schemas.Add("", "pack://application:,,,/MyAssemblyName;component/Resources/XSD Resources/Product.xsd")
XML.Validate(Schemas, Sub(sender As Object, e As ValidationEventArgs) Console.WriteLine(e.Message))
' ...
Class CustomResolver
Inherits XmlUrlResolver
Public Overrides Function GetEntity(absoluteUri As Uri, role As String, ofObjectToReturn As Type) As Object
If absoluteUri.Scheme = "pack" Then
Return Application.GetResourceStream(absoluteUri).Stream
End If
Return MyBase.GetEntity(absoluteUri, role, ofObjectToReturn)
End Function
End Class这是最低限度的测试,所以您可能需要添加一些错误处理,等等。
https://stackoverflow.com/questions/43549015
复制相似问题