Почему параметр /reference для svcutil.exe не работает?

Я пытаюсь использовать svcutil.exe для создания только сервисных контрактов (интерфейсов) из набора файлов .wsdl. Когда я это делаю (из wsdl, размещенного по http), он выбирает включенные схемы и генерирует для них весь код.

Здорово.

Однако я ДЕЙСТВИТЕЛЬНО хотел бы использовать набор классов, уже сгенерированных из файлов схемы с помощью инструмента xsd.exe (причины этого не важны, достаточно сказать, что Мне нужно, чтобы типы были в одной сборке, а сервисные контракты в другой). Мне удалось создать сборку, содержащую все типы.

Проблема возникает, когда я пытаюсь заставить svcutil.exe использовать типы в этой сборке. Моя командная строка выглядит примерно так:

svcutil /target:code /noconfig /reference:my_types.dll http://path/to/wsdl

Это прекрасно работает, но сгенерированный код содержит дубликаты всех типов в файле my_types.dll. Насколько я понимаю из документации для svcutil.exe, это именно та проблема, которую должен решить параметр /reference:. Однако в моем случае это не работает.

Почему?


person Mark    schedule 02.09.2010    source источник


Ответы (2)


По-видимому, это работает только для типов DataContract, а не для типов XmlSerializer.

http://blogs.msdn.com/b/youssefm/archive/2009/10/09/reusing-types-in-referenced-assemblies-with-svcutil-sr-switch.aspx

person Andrew    schedule 22.10.2010
comment
Похоже, именно в этом причина. Я бы хотел, чтобы он более подробно рассказал, почему существует это ограничение, но тем не менее спасибо за ответ! - person Mark; 25.10.2010
comment
Вы пытались вручную запустить WSDL.exe против вашего WSDL для создания прокси-класса. Удалите классы, которые он генерирует, затем добавьте ссылки на свои классы. - person Andrew; 25.10.2010

У меня была эта проблема. Что-то в двоичном файле, на которое я ссылался с помощью /r, все еще снова собиралось в сгенерированном коде. Один из объектов, возвращаемых одной из сервисных функций, возвращал таблицу данных или что-то в этом роде. Я добавил /r ко всему пути к System.Data, и это исправлено.

/r:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.5.2\System.Data.dll"

person David Osborne    schedule 02.07.2015