2010-09-02 6 views
7

Sto tentando di utilizzare svcutil.exe per generare -solo- i contratti di servizio (interfacce) da un insieme di file .wsdl. Quando faccio questo (da un wsdl http hostato), prende gli schemi inclusi e genera tutto il codice per loro.Perché l'opzione/reference di svcutil.exe non funziona?

Grande.

Quello che vorrei davvero piacerebbe fare, però, è quello di utilizzare un insieme di classi già generate dai file schema utilizzando lo strumento xsd.exe (le ragioni di questo non sono importanti, basti dire che ho è necessario avere i tipi in un assembly e i contratti di servizio in un altro). Ho avuto successo nel generare un assembly contenente tutti i tipi.

Il problema si verifica quando si tenta di ottenere svcutil.exe per utilizzare i tipi in tale assembly. La mia linea di comando simile a questa:

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

Questo funziona bene, ma il codice generato contiene i duplicati di tutti i tipi nel file my_types.dll. Secondo la documentazione di svcutil.exe, questo è l'esatto problema che il parametro/reference: è destinato a superare. Nel mio caso, tuttavia, non funziona.

Perché?

risposta

5

Apparentemente funziona solo con tipi DataContract e non con tipi XmlSerializer.

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

+0

Questo sembra essere esattamente il motivo. Vorrei che avesse approfondito il motivo per cui questa limitazione esiste, ma comunque grazie per la risposta! – Mark

+0

Avete provato a eseguire manualmente WSDL.exe sul WSDL per generare una classe proxy. Elimina le classi che genera e aggiungi i riferimenti alle tue classi. – Andrew

1

ho avuto questo problema. Qualcosa in un file binario che stavo riferendo con/r era ancora in fase di costruzione nel codice generato. Uno degli oggetti restituiti da una delle funzioni di servizio restituiva un datatable o qualche altra cosa orribile del genere. Ho aggiunto un/r all'intero percorso di System.Data e l'ho risolto.

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