199 votos

¿Qué significa ' useLegacyV2RuntimeActivationPolicy ' en la configuración de .NET 4?

Mientras que la conversión de un proyecto que utiliza SlimDX, y por lo tanto tiene el código no administrado, a .NET 4.0 me encontré con el siguiente error:

De modo mixto de la asamblea se construye en contra de la versión 'v2.0.50727' en tiempo de ejecución y no se puede cargar en la 4.0 tiempo de ejecución sin la información de configuración adicional.

El google me dio la solución, que consiste en añadir a las aplicaciones de configuración:

<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
  </startup>
</configuration>

Mi pregunta es, ¿cuál es el useLegacyV2RuntimeActivationPolicy haciendo? No puedo encontrar ninguna documentación al respecto.

156voto

Cameron MacFarland Puntos 27240

Después de un poco de tiempo (y más búsqueda), he encontrado esta entrada de blog por Jomo Fisher.

Uno de los problemas recientes que hemos visto es que, debido a la ayuda de lado por lado tiempos de ejecución, .NET 4.0 ha cambiado la forma en que se une a los mayores de modo mixto de asambleas. Estas asambleas son, por ejemplo, aquellos que son compiladas a partir de C++\CLI. Actualmente disponible DirectX asambleas son el modo mixto. Si usted ve un mensaje como este, entonces usted sabe que se han topado con el problema:

De modo mixto de la asamblea se construye en contra de la versión 'v1.1.4322' en tiempo de ejecución y no se puede cargar en la 4.0 tiempo de ejecución sin la información de configuración adicional.

[Snip]

La buena noticia para las aplicaciones es que usted tiene la opción de volver a caer en .NET era 2.0 unión de estos conjuntos mediante el establecimiento de un app.config de la bandera así:

<startup useLegacyV2RuntimeActivationPolicy="true">
  <supportedRuntime version="v4.0"/>
</startup>

Por lo que se ve como la forma en que el tiempo de ejecución de las cargas de modo mixto asambleas ha cambiado. No puedo encontrar ninguna información sobre este cambio, o por qué se hizo. Pero la useLegacyV2RuntimeActivationPolicy atributo vuelve a CLR 2.0 de carga.

116voto

Mark Miller Puntos 1025

He aquí una explicación escribí recientemente para ayudar con el vacío de información sobre este atributo. http://www.marklio.com/marklio/PermaLink,guid,ecc34c3c-be44-4422-86b7-900900e451f9.aspx (Internet Archive Wayback Machine link)

Para citar los más relevantes bits:

[Instalación .NET] v4 es la de "no impacto". No debe cambiar el comportamiento de los componentes existentes cuando se instala.

El useLegacyV2RuntimeActivationPolicy atributo básicamente le permite a usted decir, "yo tengo algunas dependencias en el legado de la laminilla de Api. Por favor, hacerlos trabajar de la manera que utiliza con respeto a la elegida en tiempo de ejecución."

¿Por qué no hacer de este el comportamiento por defecto? Usted podría argumentar que este comportamiento es más compatible, y hace de portar el código de las versiones anteriores mucho más fácil. Si usted recordará, este no puede ser el comportamiento predeterminado porque podría hacer que la instalación de la v4 de impacto, que se puede dividir aplicaciones existentes instalado en su máquina.

El post completo lo explica con más detalle. En la versión RTM MSDN docs en esta debería ser mejor.

2voto

Kel Puntos 710

Estaba buscando exactamente lo mismo, he encontrado algo alguna documentación "vista previa", sobre los cambios que se hicieron a la política de activación. Aquí está el enlace: http://msdn.microsoft.com/en-us/library/dd233115%28VS.100%29.aspx

2voto

Pavel Radzivilovsky Puntos 11613

Como sugieren otras respuestas, puedes probar usando useLegacyV2RuntimeActivationPolicy . Pero, primero aprender acerca de los daños de esta bandera a su aplicación, de este post y los enlaces de él.

1voto

Pavel Savara Puntos 1745

Doc para el elemento de inicio en MSDN

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: