2010-09-10 41 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