2010-04-22 15 views
35

Stavo cercando di usare svcutil.exe per generare classi proxy per un servizio, ma quando uso l'opzione /reference per fare riferimento a un assembly creato per .NET 4.0 ottengo un errore.Svcutil.exe per .NET 4.0?

Could not load file or assembly [...] or one of its dependencies. This assembly is built by a runtime newer than the currently loaded runtime and cannot be loaded.

Quindi sembra che io stia usando una vecchia versione di svcutil.exe. Sto usando quello in "C:\Program Files\Microsoft SDKs\Windows\v7.0A che era l'ultimo che potrei trovare. C'è una versione successiva da qualche parte che dovrei usare?

risposta

59

Ho avuto lo stesso problema. Se il progetto è impostato per utilizzare il .NET Framework 4.0, è necessario scegliere la versione giusta di SvcUtil.exe, o genera un errore: "Impossibile caricare ..."

  • Se si guarda in " Microsoft SDK \ Windows \ v6.0A \ Bin ", vedrai che la versione di tale file è" 3.0.4506.2152 ".
  • La versione di SvcUtil.exe in "Microsoft SDK \ Windows \ v7.0A \ Bin" è esattamente la stessa, quindi mi ha lanciato anche un ciclo.

Tuttavia, c'è un'altra versione di SvcUtil.exe situato nel "Microsoft SDK \ Windows \ v7.0A \ Bin \ netfx 4.0 Strumenti", che è la versione "4.0.30319.1", e se lo si utilizza, tutto dovrebbe funzionare

+0

Microsoft SDK \ Windows \ v7.0A \ Bin \ NETFX 4.0 è la risposta corretta. Grazie! – Mark

+0

Grazie, anche io, sono così grato ... ecc. <3 (commento illegale, lo so, tutti gli altri semplicemente votano) –

0

In base a questo collegamento per .Net 4.0, è necessario utilizzare uno in C: \ Programmi \ Microsoft SDK \ Windows \ v6.0 \ Bin.

http://msdn.microsoft.com/en-us/library/aa347733.aspx

sembra un po 'strano, però, se l'uno nel dir v7.0A è troppo vecchio.

+0

Ho controllato e sono entrambi la stessa versione, 3.0.4506.2152, quindi ottengo lo stesso errore provando quello . –

+0

Provalo invece: http://stackoverflow.com/questions/896629/how-to-run-clr-2-application-as-clr-4-application –

0

Perché non ricostruire come .NET 3.5 per generare le classi? Sospetto che i tipi che stai generando non siano basati su alcuna funzionalità .NET 4.0. Ai file cs non interessa la versione per cui è stata creata la DLL, quindi è possibile utilizzarli in un progetto 4.0 senza problemi.

+0

Voglio eseguire svcutil come evento di build in modo che ciò significhi avendo sempre il mio assembly referenziato compilato come .Net 3.5. Funziona per ora poiché non ci sono ancora funzionalità 4.0, ma voglio essere in grado di aggiungerlo in seguito. Sono ancora interessato a trovare il vero motivo del mio problema. Non esiste una versione di svcutil disponibile che supporti .Net 4? Ci sarà? –

+0

Contrassegnerò questo come risposta accettata dal momento che è un work-around accettabile per ora. Ancora interessato a più risposte però. Strumenti –

0

Ho lo stesso problema.

Microsoft dice che è possibile utilizzare .Net 4 DLL con il nuovo SvcUtil che viene fornito con l'ultima versione di .Net (http://msdn.microsoft.com/en-us/library/aa347733.aspx) ma quella versione sembra essere quella che si menziona sopra. Non accederà a .Net 4 DLL come riferimenti.

7

L'ultima versione del SDK per NET 4.0 è disponibile a

http://msdn.microsoft.com/en-us/windows/bb980924.aspx

svcutil.exe che risiede nella v7.1/bin ha la versione 3.0.4506.2152.

svcutil.exe che risiede negli strumenti v7.1/bin/NETFX 4.0 ha la versione 4.0.30319.1.

+0

Ho installato 7.1, e la cartella BIN non ha svcutil.exe .. –

+0

Si scopre che l'installazione predefinita dell'SDK non ha selezionato l'opzione Strumenti .NET. Con quello selezionato, vengono installati i file svcutil.exe. –

0

Aggiornamento: nuova versione di util non è V7.0 secondo:

Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools

SvcUtil.exe v8.0A è ora disponibile dopo l'installazione di Visual Studio 2012 (VS 2012)

"C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\SvcUtil.exe"

cosa si vuole veramente è la definizione completa per trasformare un file WSDL in un client di servizio:

/n:*,MyCompany.Services.Client /out:IServiceInterface.cs ServiceDefinition.wsdl.xml

Dove il servizio definition.wsdl è ovviamente la risposta? wsdl da qualsiasi vecchio endpoint di sapone.

Ricordano i minion e i troll! Tutto ora è Async, quindi cerca e approfitta del nuovo supporto Async generato dalla v8.0 di SVCUtil.exe