2010-09-10 70 views
3

我正在使用xsd2code从星形标准提供的xsd模式生成类。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

回答

1

我已经使用XSD.EXE问题为好。我已经成功使用微软的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. 使用不同的命名空间每个生成的文件。
  2. 给你所有的类型唯一的名字(可能不适合你的情况)。

如果你仔细想想,每个生成的文件实际上是一堆类,不只是一个类,所以给它们自己的命名空间确实是有意义的。

1

您可以为LinqToXsd命名空间配置使用额外的XML文件。

例由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> 

用于与Visual Studio无缝集成,通过ehosca的其他细节,http://linqtoxsd.codeplex.com/discussions/238570#PostDetailsCell_591728

建立在同一个解决方案,您的XSD的XML文件,(称之为linq2xsdconfig.xml)

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

您还可以将相同的XML文件传递到LinqToXsd.exe,如@bporter所述。

LinqToXsd <schemaFile> /config:linq2xsdconfig.xml 
1

现在有“排除包含类型”复选框,所以应该没有问题了。

+0

谢谢!节省了我搜索的时间 – Quannt 2016-02-11 17:55:51

+0

仅适用于导入的模式,不包括(社区版 - v3.4.0.38968) – 2017-09-02 17:45:07