2010-04-22 15 views
35

Estaba tratando de usar svcutil.exe para generar clases de proxy para un servicio, pero cuando uso la opción /reference para hacer referencia a un ensamblado creado para .NET 4.0, aparece un error.Svcutil.exe para .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.

Parece que estoy usando una versión anterior de svcutil.exe. Estoy usando el que está en "C:\Program Files\Microsoft SDKs\Windows\v7.0A que fue el último que pude encontrar. ¿Hay alguna versión posterior en algún lugar que se supone que debo usar?

Respuesta

59

Tuve el mismo problema. Si su proyecto está configurado para utilizar el .NET Framework 4.0, debe seleccionar la versión correcta de SvcUtil.exe, o se generará un error: "No se pudo cargar ..."

  • Si nos fijamos en el " Microsoft SDKs \ Windows \ v6.0A \ Bin ", verá que la versión de ese exe es" 3.0.4506.2152 ".
  • La versión de SvcUtil.exe en "Microsoft SDKs \ Windows \ v7.0A \ Bin" es exactamente la misma, por lo que me lanzó a un bucle también.

Sin embargo, hay otra versión de SvcUtil.exe situado en "Microsoft SDKs \ Windows \ v7.0A \ Bin \ netfx 4.0 Herramientas" que es la versión "4.0.30319.1", y si lo usa, todo debería funcionar

+0

Microsoft SDKs \ Windows \ v7.0A \ Bin \ NETFX 4.0 Tools es la respuesta correcta. ¡Gracias! – Mark

+0

Gracias, yo también, estoy muy agradecido ... etc <3 (comentario ilegal, lo sé, todos los demás simplemente votan esto) –

0

De acuerdo con este enlace para .Net 4.0 debe usar uno en C: \ Archivos de programa \ Microsoft SDKs \ Windows \ v6.0 \ Bin.

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

parece un poco extraño, sin embargo, si el uno en el dir v7.0A es demasiado viejo.

+0

Lo revisé y ambos son de la misma versión, 3.0.4506.2152, así que me sale el mismo error al intentarlo . –

+0

Pruebe esto en su lugar tal vez: http://stackoverflow.com/questions/896629/how-to-run-clr-2-application-as-clr-4-application –

0

¿Por qué no reconstruir como .NET 3.5 para generar las clases? Sospecho que los tipos para los que estás generando clases no dependen de ninguna funcionalidad .NET 4.0. A los archivos cs no les importará para qué versión se creó el archivo DLL para que pueda usarlos en un proyecto 4.0 sin problemas.

+0

Quiero ejecutar svcutil como un evento de compilación de modo que eso signifique teniendo siempre ensamblado mi referencia compilado como .Net 3.5. Funciona por ahora, ya que todavía no hay ninguna funcionalidad 4.0, pero quiero poder agregarla más tarde. Todavía estoy interesado en encontrar el motivo real de mi problema. ¿No hay una versión de svcutil disponible que admita .Net 4? ¿Habrá? –

+0

Voy a marcar esto como la respuesta aceptada, ya que es una solución aceptable por ahora. Sin embargo, todavía estoy interesado en más respuestas. –

0

Estoy teniendo el mismo problema.

Microsoft dice que solo puede usar .Net 4 DLL con el nuevo SvcUtil que viene con la última versión de .Net (http://msdn.microsoft.com/en-us/library/aa347733.aspx), pero esa versión parece ser la que usted menciona arriba. No accederá .Net 4 DLL como referencias.

7

La última versión del SDK para .Net 4.0 está disponible en

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

svcutil.exe que reside en v7.1/bin tiene versión 3.0.4506.2152.

svcutil.exe que reside en v7.1/bin/NETFX 4.0 Tools tiene la versión 4.0.30319.1.

+0

Instalé 7.1, y la carpeta BIN no tiene svcutil.exe .. –

+0

Resulta que la instalación predeterminada del SDK no seleccionó la opción .NET Tools. Con eso seleccionado, se instalan los archivos svcutil.exe. –

0

Actualización: La versión más reciente de util no está de acuerdo con v7.0:

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

SvcUtil.exe v8.0A ya está disponible después de instalar Visual Studio 2012 (VS 2012)

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

Lo que realmente quiere es la definición completa para convertir un archivo WSDL en un cliente de servicios:

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

Donde el servicio definition.wsdl es obviamente la respuesta? wsdl de cualquier viejo punto final de soap.

Minions and Trolls ¡Recordar! Todo ahora es Async, así que busca y aprovecha el nuevo soporte Async generado por v8.0 de SVCUtil.exe