2010-10-17 26 views
14

Nuestra aplicación está construida con VS 2008, utiliza Linq y tiene Framework de destino establecido en .NET Framework3.5.¿Cómo forzar a una aplicación a usar .NET 3.5 o superior?

Funciona bien cuando solo .NET 3.5 o 4 está instalado en la máquina.

Sin embargo, en máquinas donde están instalados tanto .NET 2 (o 3.0) como .NET 4, la aplicación se carga con .NET 2 y se bloquea cuando se accede a Linq, ya que busca las bibliotecas .NET 3.5.

El uso de la etiqueta en app.config no parece ayudar, ya que especifica la versión CLR, que es 2 en el caso de .NET 3.5.

Tenga en cuenta que nuestra instalación verifica que .NET 3.5 o superior está instalado.

¿Hay una manera de decirle a la aplicación de la carga:

  • la más alto CLR que encuentra, o
  • CLR 4 si está instalado, y CLR 2 si CLR 4 no está instalado, o
  • CLR 2 si .NET 3.5 está instalado y CLR 4 si .NET 3.5 no está instalado

(Tenga en cuenta que pregunta similar se deja sin respuesta en the Community Content section of the Element documentation)

Respuesta

13

La formación de la pregunta me llevó a la respuesta. Como se mencionó en the Element documentation,

Cuando varias versiones del tiempo de ejecución están soportados, el primer elemento debe especificar la versión más preferida del tiempo de ejecución, y el último elemento debe especificar el menos versión preferida.

Así que la manera de alcanzar la segunda opción ("CLR 4 si está instalado, y CLR CLR 2 es 4 no está instalado") es invertir el orden de los elementos en app.config:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <startup useLegacyV2RuntimeActivationPolicy="true"> 
     <supportedRuntime version="v4.0"/> 
     <supportedRuntime version="v2.0.50727"/> 
    </startup> 
</configuration> 

De esta manera, .NET 4 se cargará si está instalado, y una versión anterior se cargará si no lo está.

+1

No se puede depurar con esta configuración: da un error y .NET 4 no es compatible con VS2008. Sin embargo, funciona bien para ejecutar la versión de lanzamiento fuera de VS. – ChrisF

+0

He tenido experiencias con aplicaciones que no se pueden iniciar si el elemento no está al final del archivo (justo antes de), al menos en Framework v3.5. Vale la pena intentar mover esta pieza de configuración hacia el final del archivo si tiene problemas de inicio. – SteveWilkinson

+0

Si solo dejé v4.0 como SupportedRuntime y en el sistema solo es v4.5, ¿se teke v.4.5 de todos modos? ¿Cómo forzar el uso de una sola versión? – Kamilos

-1

Si tiene un EXE no administrado llamando a una DLL .NET, necesita crear también un archivo foo.exe.config, que contiene el bloque <startup>... anterior.

0

Otro enlace útil es this page en MSDN. Esto muestra todos los valores requeridos en app.config si solo desea apuntar al perfil del cliente o si necesita el perfil completo.

0

.NET Framework versión 3.0 y 3.5 usan la versión 2.0.50727 del CLR.

Cuestiones relacionadas