xsd2code多个xsd文件创建重复的子类

时间:2010-09-10 21:16:12

标签: c# xsd xsd2code

我正在使用xsd2code从星标准提供的xsd架构生成类。

我确实尝试使用xsd.exe来生成类,但它没有做好。

当我从'ProcessCreditApplication.xsd'生成类时,它会生成一个包含所有所需类的文件。此时一切正常。

当我生成另一个xsd,ConfirmBOD.xsd时,我得到歧义错误,因为两个文件都包含相同的基类。

例如,两个文件都会生成“描述”类。由于两个文件都在同一名称空间中,因此同一名称空间中的两个类之间存在歧义。

有没有办法从多个xsd生成类,以便子类不重复?

我唯一想到解决这个问题的方法是将每个生成的文件放在自己的命名空间中。这不是理想的,但有效。

我想使用xsd.exe,因为它似乎采用多个文件,但它生成的代码不适合我的需要。

更新 我尝试了Linq到xsd,但它没有用。它抱怨相同的类型已经“宣布”。

供参考:这是我得到架构的地方:

http://www.starstandard.org/SIGXMLSTAR4/XMLSchemas http://www.starstandard.org/uploads/SIGXMLSTAR4/STARSchemaRepository_Rev444.zip

4 个答案:

答案 0 :(得分:1)

我也遇到过使用xsd.exe的问题。我已成功使用Microsoft的LinqToXsd项目从XSD文件生成C#代码。我没有尝试使用极其复杂的XSD文件,但你可以尝试一下。

LinqToXsd项目是CodePlex

上的开源项目

命令行用法语法为:

LinqToXsd <schemaFile> [one or more schema files] [/fileName:<csFileName>.cs] [/lib:<assemblyName>] [/config:<configFileName>.xml] [/enableServiceReference] [/nameMangler2]

答案 1 :(得分:1)

我认为实际上只有两种选择:

  1. 为每个生成的文件使用不同的命名空间。
  2. 为您的所有类型提供唯一的名称(可能不适合您的情况)。
  3. 如果你考虑一下,每个生成的文件实际上是一堆类,而不仅仅是一个类,所以给它们自己的命名空间实际上是有意义的。

答案 2 :(得分:1)

您可以使用其他XML文件进行LinqToXsd命名空间配置。

mognesshttp://blog.mogness.com/?p=36

的示例
<?xml version="1.0" encoding="utf-8" ?>
<Configuration xmlns="http://www.microsoft.com/xml/schema/linq">
  <Namespaces>
    <Namespace Schema="http://www.Schema1" Clr="My.Schema1"/>
    <Namespace Schema="http://www.Schema2" Clr="My.Schema2"/>
    <Namespace Schema="" Clr="My"/>
  </Namespaces>
</Configuration>

通过ehoscahttp://linqtoxsd.codeplex.com/discussions/238570#PostDetailsCell_591728

与Visual Studio顺利集成的其他详细信息
  

在与XSD相同的解决方案中创建XML文件(并将其命名为linq2xsdconfig.xml)

     

选择linq2xsdconfig.xml的构建操作:LinqToXsdConfiguration

@bporter所述,您也可以将同一XML文件传递给LinqToXsd.exe

LinqToXsd <schemaFile> /config:linq2xsdconfig.xml

答案 3 :(得分:1)

现在有&#34;排除包括的类型&#34;复选框,所以应该没有问题了。