【发布时间】:2011-07-16 22:53:58
【问题描述】:
我有一个类库项目,其中包含我的解决方案中其他项目之间的一些共享代码。这些共享代码之一涉及针对 XSD 文件运行 XML 验证。 XSD 的名称作为参数传递给方法,然后使用Assembly.GetFile() 加载。
问题在于 XSD 文件导入了另外两个 XSD。我已将所有三个作为资源加载到我的类库中,但从我读过的内容来看,xsd:import 不起作用。是否有其他方法可以在我的类库项目中使用这些 XSD 而不会破坏 xsd:import 语句?
编辑 - 更新
我在下面实现了Alexander's suggestion,但正如我在评论中所说,每当GetEntity() 被称为xs:import'd XSD 时,ofObjectToReturn 就是null。这导致xs:import'd 类型的第一个实例引发异常“类型未定义”。
为了解决这个问题,我将GetEntity() 更改为返回GetManifestResourceStream(),而不考虑ofObjectToReturn 的值。这现在似乎适用于第一级xs:import 语句,但在原始xs:import XSD 中的一个二级xs:import 不起作用。我已确认此辅助 xs:import 正在调用 GetEntity(),但我收到此辅助 XSD 中定义的类型的“类型未定义”异常。
- TopLevel.xsd - 类型解析得很好
- FirstLevelImport1.xsd - 类型解析很好
- FirstLevelImport2.xsd - 类型解析得很好
- SecondLevelImport1.xsd - 为此 XSD 中定义的类型抛出“未定义类型”异常
在XmlReader.Create() 期间抛出“类型未定义”异常,该异常通过定义架构验证的XmlReaderSettings。
【问题讨论】:
标签: c# .net visual-studio-2010 xsd embedded-resource