2010-09-02 8 views
7

Ich versuche svcutil.exe zu verwenden, um die Serviceverträge (Schnittstellen) aus einem Satz von .wsdl-Dateien zu generieren -only-. Wenn ich das tue (von einem http-hosted wsdl), nimmt es die enthaltenen Schemas auf und erzeugt den ganzen Code für sie.Warum funktioniert die/reference-Option für svcutil.exe nicht?

Großen.

Was würde ich wirklich zu tun, ist jedoch eine Reihe von Klassen erzeugt bereits die Verwendung der Schemadateien die xsd.exe Werkzeug (die Gründe dafür sind nicht wichtig, es genügt, dass ich zu sagen müssen die Typen in einer Baugruppe haben, und die Serviceverträge in einer anderen). Es ist mir gelungen, eine Baugruppe zu erzeugen, die alle Typen enthält.

Das Problem tritt auf, wenn ich versuche, Svcutil.exe die Typen in dieser Assembly zu verwenden. Meine Befehlszeile sieht wie folgt aus:

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

Dies funktioniert gut, aber der generierte Code enthält Duplikate aller Typen in der my_types.dll Datei. Es ist mein Verständnis von der Dokumentation für svcutil.exe, dass dies das genaue Problem ist, dass der/referenz: Parameter soll überwunden werden. In meinem Fall funktioniert es jedoch nicht.

Warum?

Antwort

5

Scheinbar funktioniert es nur für DataContract-Typen und nicht XmlSerializer-Typen.

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

+0

das genau der Grund zu sein scheint. Ich wünschte, er wäre näher darauf eingegangen, warum diese Einschränkung existiert, aber danke für die Antwort trotzdem! – Mark

+0

Haben Sie versucht, WSDL.exe manuell für Ihre WSDL auszuführen, um eine Proxy-Klasse zu generieren. Löschen Sie die generierten Klassen und fügen Sie dann die Referenzen zu Ihren Klassen hinzu. – Andrew

1

hatte ich dieses Problem. Etwas in einer Binärdatei, auf die/das ich verweise, wurde im generierten Code immer noch neu erstellt. Eines der Objekte, die von einer der Dienstfunktionen zurückgegeben wurden, war die Rückgabe einer Datentabelle oder einer anderen schrecklichen Sache. Ich fügte a/r dem gesamten Pfad zu System.Data hinzu und das reparierte es.

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