visual - ¿Qué hace ''useLegacyV2RuntimeActivationPolicy'' en la configuración de.NET 4?
this error is because you are running a.net framework 3.5 based application in.net framework 4 (2)
Al convertir un proyecto que usaba SlimDX y, por lo tanto, tiene código no administrado, a .NET 4.0 me encontré con el siguiente error:
El ensamblaje de modo mixto se construye contra la versión ''v2.0.50727'' del tiempo de ejecución y no se puede cargar en el tiempo de ejecución 4.0 sin información de configuración adicional.
Googlear alrededor me dio la solución, que es agregar esto a la configuración de las aplicaciones:
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
</configuration>
Mi pregunta es, ¿qué está haciendo useLegacyV2RuntimeActivationPolicy
? No puedo encontrar ninguna documentación al respecto.
Aquí hay una explicación que 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 (enlace de Internet Wayback Machine)
Para citar los bits más relevantes:
[Instalar .NET] v4 no es "impactante". No debe cambiar el comportamiento de los componentes existentes cuando se instalan.
El atributo useLegacyV2RuntimeActivationPolicy básicamente te permite decir: "Tengo algunas dependencias en las API de compatibilidad de compatibilidad heredadas. Por favor, hágalos trabajar como solían hacerlo con respecto al tiempo de ejecución elegido ".
¿Por qué no hacemos este el comportamiento por defecto? Podría argumentar que este comportamiento es más compatible y hace que portar el código de versiones anteriores sea mucho más fácil. Si recuerdas, este no puede ser el comportamiento predeterminado porque haría que la instalación de v4 fuera impactante, lo que puede romper aplicaciones existentes instaladas en tu máquina.
El post completo explica esto con más detalle. En RTM, los documentos de MSDN sobre esto deberían ser mejores.
Después de un poco de tiempo (y más búsquedas), encontré esta entrada de blog de Jomo Fisher.
Uno de los problemas recientes que hemos visto es que, debido a la compatibilidad con los tiempos de ejecución en paralelo, .NET 4.0 ha cambiado la forma en que se une a los conjuntos de modo mixto más antiguos. Estos conjuntos son, por ejemplo, los que se compilan desde C ++ / CLI. Los ensamblajes de DirectX actualmente disponibles son de modo mixto. Si ve un mensaje como este, entonces sabe que se ha topado con el problema:
El ensamblaje de modo mixto se construye contra la versión ''v1.1.4322'' del tiempo de ejecución y no se puede cargar en el tiempo de ejecución 4.0 sin información de configuración adicional.
[Recorte]
La buena noticia para las aplicaciones es que tiene la opción de recurrir al enlace de la era .NET 2.0 para estos ensamblajes al establecer un indicador app.config de este modo:
<startup useLegacyV2RuntimeActivationPolicy="true"> <supportedRuntime version="v4.0"/> </startup>
Así que parece que la forma en que el tiempo de ejecución carga los ensamblados de modo mixto ha cambiado. No puedo encontrar ningún detalle sobre este cambio o por qué se realizó. Pero el atributo useLegacyV2RuntimeActivationPolicy
vuelve a cargar CLR 2.0.