Cambie el proyecto C ++ / CLI a otro marco que no sea 4.0 con vs2010

153

Desde que actualicé mi proyecto al formato de proyecto Visual Studio 2010, mi proyecto C ++ / CLI está dirigido a .NET Framework 4.0.

Es fácil cambiar la versión de marco a otra versión desde un proyecto C #, pero no tengo idea de cómo hacerlo en un proyecto C ++ / CLI, no veo ninguna configuración para esto en las páginas de propiedades del proyecto.

codymanix
fuente

Respuestas:

190

Esto aparece cuando presiona F1 en el cuadro de diálogo Marco y referencias:

De forma predeterminada para nuevos proyectos, el marco de destino está configurado en .NET Framework 4. El IDE no admite la modificación del marco de destino, pero puede cambiarlo manualmente. En el archivo del proyecto (.vcxproj), el marco de destino predeterminado está representado por el elemento de propiedad v4.0. Para cambiar el marco de destino, descargue el proyecto, use un editor de texto para abrir el archivo del proyecto y luego cambie el valor del elemento de propiedad de v4.0 a otra versión que esté instalada en su servidor. Por ejemplo, si especifica v3.5, que representa .NET Framework v3.5, se debe instalar Visual Studio 2008 SP1 . Guarde y cierre el archivo, vuelva a cargar el proyecto y verifique que el marco de destino se muestre en la página de propiedades. *

Eso no es terriblemente preciso en proyectos convertidos, tendrá que agregar el <TargetFrameworkVersion>elemento usted mismo. Póngalo en el PropertyGroup etiquetado "Globals":

  <PropertyGroup Label="Globals">
    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
    <others...>
  </PropertyGroup>

La historia es diferente cuando usa VS2012 y versiones posteriores, la primera versión de VS que adquirió la configuración de Platform Toolset en la página de propiedades General. Luego debe seleccionar "v90" para obtener una compilación adecuada que apunte a 3.5. Sin embargo, es torpe, debe tener todas las versiones intermedias de VS instaladas en la máquina para tener esa selección disponible.

Por qué necesita VS2008 instalado requiere una explicación por sí mismo. El problema principal es que la biblioteca de tiempo de ejecución C (msvcrt100.dll y superior) contiene código .NET para admitir la ejecución de código administrado. El detalle crucial es un inicializador de módulo que garantiza que la CRT se inicialice correctamente en un programa que usa código C ++ / CLI. Ese código siempre apunta a .NET 4 y, dado que está integrado en msvcrt100.dll (y versiones posteriores), siempre tiene una dependencia dura en el tiempo de ejecución v4.0.30319. Solo puede tener una dependencia pura v2.0.50727 cuando utiliza el antiguo tiempo de ejecución de C, msvcrt90.dll. Solo puede estar seguro de que tiene una dependencia msvcrt90.dll cuando utiliza los archivos #include de VS2008 del compilador.

De hecho, es bastante necesario pasar a .NET 4 pronto, si no lo hace, tendrá problemas de compilación como este. Hay muy pocos obstáculos prácticos para eso, .NET 4 está ampliamente disponible de forma gratuita en todos los objetivos que puedas imaginar. Superar el FUD que está asociado con el cambio a una versión de tiempo de ejecución superior es generalmente solo el problema real. No hay razones para el miedo y la duda, es estable.

Hans Passant
fuente
8
Ahora hice estos pasos pero ahora aparece el error "MSB8009: .NET Framework 2.0 / 3.0 / 3.5 apunta al conjunto de herramientas de la plataforma v90. Asegúrese de que Visual Studio 2008 esté instalado en la máquina". No tengo VS2008.
codymanix
8
Cita de mi respuesta: "Visual Studio 2008 SP1 debe estar instalado". Te faltan las herramientas de compilación necesarias.
Hans Passant
2
Es posible que también deba eliminar el archivo .suo y volver a abrir la solución. Como fue en mi caso.
alehro
Lo hice funcionar simplemente instalando Visual Studio 2008 express (gratis). De hecho, recibí un montón de errores cuando cambié el conjunto de herramientas de la plataforma a v90. ¡Volviendo a v100 los arregló a todos!
simon.d
44
Al crear programas .NET Framework 4.0 que usan proyectos mixtos de C ++ / CLI y C # con Visual Studio 2010, la instalación de .NET Framework 4.5 (o Visual Studio 2013, que viene con .NET Framework 4.5) conduce a proyectos C ++ / CLI en VS 2010 se construirá contra 4.5 en lugar de anteriormente 4.0. Cuando tiene proyectos C # que se compilan contra 4.0 en la misma solución que hace referencia a los proyectos C ++ / CLI, esto se rompe. Insertar <TargetFrameworkVersion> v4.0 </TargetFrameworkVersion> en los archivos vcxproj de los proyectos C ++ / CLI resuelve este problema. \ o /
Daniel Albuschat
18

Sí, es posible cambiar el objetivo incluso para proyectos administrados de C ++:

Cambio de .NET Framework de destino para C ++ / CLI (VS 2010) Para cambiar la versión de .NET Framework para proyectos de C ++ / CLI (VS 2010)

Haz clic derecho en el proyecto en el Explorador de soluciones y haga clic en Descargar proyecto botón derecho del ratón en el proyecto sin carga en el Explorador de soluciones y seleccione Editar <projectname>.vcxprojarchivo XML proyecto En localizar nodo <PropertyGroup Label="Globals">En ese nodo nodo de localizar <TargetFrameworkVersion>(si el nodo no se puede encontrar, añadirlo) El texto interior de las define nodo marco objetivo. Puede ser v2.0, v3.0, v3.5 o v4.0 Guardar el archivo vcxproj y cerrarlo Haga clic derecho en el proyecto descargado en el Explorador de soluciones y haga clic en Volver a cargar el ejemplo del proyecto <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

Nota: Estos pasos solo se aplican a Visual Studio 2010, ya que utiliza un nuevo formato de archivos de proyecto C ++.

Fuente en MSDN: Cómo: Cambiar el .NET Framework de destino

Brian R. Bondy
fuente
5

por un usuario anónimo:

(Editando ya que soy un usuario nuevo y no puedo responder a esto, cualquiera que vea esto no dude en enviar lo siguiente) Cambiar el Conjunto de herramientas a v100 en realidad hace que VS2010 apunte a .NET 4.0, a pesar de que todavía se mostrará como objetivo 3.5 en el propiedades del proyecto VS2010 realmente debería emitir una advertencia sobre esto, porque actualmente parece que usted puede apuntar a .NET 3.5 con el conjunto de herramientas v100, que no puede.

hakre
fuente
Esto se debe a que la orientación múltiple solo le permite apuntar a V2.0, 3.0, 3.5 y 4.0; Las versiones 1.x de .Net no pueden ser dirigidas de esta manera
Jeroen Landheer
0

En VS 2010, si el conjunto de herramientas está instalado, vaya a propiedades del proyecto-> propiedades de configuración-> general y cambie el conjunto de herramientas de la plataforma de v90 a v100.

nche
fuente