xsd2code несколько файлов xsd создают дубликаты подклассов - PullRequest
3 голосов
/ 11 сентября 2010

Я использую 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 ]

1 голос
/ 15 июля 2014

Теперь есть флажок "Исключить включенные типы", поэтому проблем больше не должно быть.

1 голос
/ 11 сентября 2010

Я думаю, что на самом деле есть только два варианта:

  1. Использовать разные пространства имен для каждого сгенерированного файла.
  2. Дайте всем вашим типам уникальные имена (вероятно, не вариант для вашей ситуации).

Если подумать, то каждый сгенерированный файл на самом деле представляет собой набор классов, а не просто один класс, поэтому имеет смысл дать каждому свое пространство имен.

1 голос
/ 25 июля 2012

Вы можете использовать дополнительный файл XML для конфигурации пространства имен LinqToXsd.

Пример: Могущество , http://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

создайте файл XML в том же решении, что и ваш XSD, и (назовите его linq2xsdconfig.xml)

Выберите действие сборки файла linq2xsdconfig.xml для: LinqToXsdConfiguration

Вы также можете передать тот же XML-файл на LinqToXsd.exe, как отмечено @bporter.

LinqToXsd <schemaFile> /config:linq2xsdconfig.xml
1 голос
/ 11 сентября 2010

У меня тоже были проблемы с использованием xsd.exe.Я успешно использовал проект Microsoft LinqToXsd для генерации кода C # из файлов XSD.Я не пробовал его с очень сложными файлами XSD, но вы можете попробовать его.

Проект LinqToXsd с открытым исходным кодом на CodePlex

Использование командной строкиСинтаксис:

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