Instalar MSVC 14.38 en Visual Studio 2022 para Unreal Engine: guía completa de downgrade v143

Necesitas compilar un proyecto de Unreal Engine que exige el toolchain de C++ de Visual Studio 2022 en MSVC 14.38, pero tu equipo tiene instalado MSVC 14.41. Aquí verás cómo instalar 14.38 en paralelo, forzar su uso en tus builds y evitar errores típicos sin desinstalar nada.

Índice

Resumen rápido

Sí, puedes usar MSVC 14.38 con Visual Studio 2022 aunque ya tengas 14.41. Las revisiones de v143 coexisten y puedes elegir cuál usar por proyecto o por build. Instala el componente “MSVC v143 (v14.38–17.8)” desde el instalador, verifica que se crea la carpeta 14.38.33130, y fuerza su selección con VCToolsVersion, vcvarsall.bat o un Directory.Build.props. Termina limpiando y recompilando tu solución de Unreal.

Conceptos clave

  • v143 es la plataforma de herramientas de C++ de Visual Studio 2022. Dentro de v143 existen subversiones (14.38, 14.41, etc.).
  • MSVC 14.38 corresponde al compilador cl.exe con versión 19.38.33130 y se instala en ...\VC\Tools\MSVC\14.38.33130\.
  • Coexistencia: múltiples subversiones de v143 se instalan en paralelo (no es necesario desinstalar 14.41 para usar 14.38).
  • Selección de versión: MSBuild y Visual Studio eligen por defecto la más reciente; puedes forzar otra estableciendo VCToolsVersion o cargando el entorno con vcvarsall.bat -vcvars_ver.
  • Unreal Engine es sensible al conjunto de librerías y al CRT: al cambiar de toolset, recompila el proyecto para evitar incompatibilidades de binarios.

Instalación del toolset desde Visual Studio Installer

  1. Abre Visual Studio Installer y pulsa Modificar en tu instancia de Visual Studio 2022.
  2. Entra en Componentes individuales y busca MSVC v143.
  3. Marca:
    • MSVC v143 – VS 2022 C++ x64/x86 build tools (v14.38–17.8).
    • Opcional: MSVC v143 – VS 2022 C++ Spectre‑mitigated libs (v14.38–17.8) si tu proyecto o dependencias usan bibliotecas con mitigaciones Spectre.
  4. Pulsa Modificar para instalar.

Al finalizar, deberías tener el directorio:

C:\Program Files\Microsoft Visual Studio\2022<Edición>\VC\Tools\MSVC\14.38.33130\

La carpeta existe de igual modo para Community, Professional o Enterprise (solo cambia <Edición>).

Verificación de la instalación

En la Developer Command Prompt for VS 2022 ejecuta:

cl

La primera línea debe mostrar 19.38.33130 como versión del compilador, lo que confirma que la 14.38 está disponible. Si la consola muestra una versión superior, no pasa nada: significa que tu entorno está apuntando a la subversión más nueva, pero ya puedes forzar la 14.38 con los métodos siguientes.

Formas de forzar el uso de la subversión deseada

Puedes elegir la subversión del toolset v143 por proyecto, por solución o por sesión de terminal. Estas son las rutas más robustas.

Archivo central de propiedades recomendado

Crea un Directory.Build.props en la carpeta donde está tu .sln para afectar a todos los proyectos nativos:

&lt;Project&gt;
  &lt;PropertyGroup&gt;
    &lt;VCToolsVersion&gt;14.38.33130&lt;/VCToolsVersion&gt;
  &lt;/PropertyGroup&gt;
&lt;/Project&gt;

Con esto, aunque Visual Studio conserve la “Plataforma de herramientas” en v143, MSBuild usará específicamente la subversión 14.38.

Parámetro de línea de comandos con MSBuild

Si compilas desde consola, añade la propiedad:

msbuild MySolution.sln /m /p:VCToolsVersion=14.38.33130

Sesión de consola con entorno fijado

Carga el entorno de compilación apuntando a la subversión concreta y luego compila:

"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x64 -vcvars_ver=14.38
msbuild MySolution.sln /m

Sustituye Community por tu edición si corresponde. Esta técnica es ideal para scripts y CI.

Proyectos CMake basados en Visual Studio

Para soluciones generadas con CMake que usan el generador de Visual Studio, fija VCToolsVersion vía globals:

cmake -G "Visual Studio 17 2022" -A x64 ^
  -D CMAKEVSGLOBALS=VCToolsVersion=14.38.33130 ^
  -S . -B build
cmake --build build --config Release

También puedes establecer la plataforma de herramientas con -T v143 y a la vez mantener la subversión con el global anterior.

Aplicación práctica en proyectos de Unreal Engine

Unreal Engine genera soluciones y proyectos nativos que luego compilan con MSBuild. Para asegurar que toda la solución usa 14.38:

  1. Añade Directory.Build.props en la raíz de la solución que genera Unreal (junto a .sln).
  2. Regenera los archivos de proyecto desde los scripts de Unreal si procede (por ejemplo, GenerateProjectFiles para Visual Studio).
  3. Borra artefactos previos que puedan arrastrar binarios del toolchain diferente:
    • En el proyecto: Intermediate/ y Binaries/.
    • En la solución: x64/, x64-Release/ o similares que contengan compilados antiguos.
  4. Compila desde Visual Studio o desde consola. Si prefieres consola, abre la Developer Command Prompt y ejecuta: vcvarsall.bat x64 -vcvars_ver=14.38 Luego lanza tu build de Unreal (UBT/UAT) como acostumbras.

Si aún se selecciona la subversión más reciente, confirma que el archivo Directory.Build.props está en la raíz correcta y se incluye en la evaluación de MSBuild (ver apartado de diagnóstico).

Solución de problemas

El instalador no muestra la subversión deseada

  • Usa Componentes individuales y busca literalmente 14.38. A menudo está agrupada bajo “MSVC v143 (v14.38–17.8)”.
  • Si tu instalador solo ofrece la más reciente, instala en paralelo otra instancia de Visual Studio 2022 o los Build Tools de 2022 que incluyan esa subversión, y luego selecciona la carpeta 14.38.33130 con VCToolsVersion.

Errores de enlace por desajuste del CRT o Spectre

  • Si ves LNK2038 u otros relacionados con RuntimeLibrary o Spectre, asegúrate de instalar el par correcto:
    • Si tus dependencias están construidas con libs Spectre, instala también “Spectre‑mitigated libs (v14.38–17.8)”.
    • Si no usas Spectre, desmarca esas librerías para que todo el árbol use el mismo tipo.
  • Recompila todas las dependencias nativas del proyecto con la misma subversión del toolset para evitar ABI mix.

Visual Studio sigue usando la subversión más nueva

  • Confirma que la Plataforma de herramientas del proyecto permanece en v143 (no cambies a otras plataformas). La subversión la controla VCToolsVersion.
  • Comprueba que Directory.Build.props está en la carpeta raíz de la solución y no únicamente en un subproyecto.
  • Prueba lanzando la compilación con: msbuild MySolution.sln /m /p:VCToolsVersion=14.38.33130 /t:Rebuild
  • Como diagnóstico, puedes preprocesar propiedades de MSBuild para verificar el valor activo: msbuild MySolution.sln /pp:props_dump.xml Abre props_dump.xml y busca VCToolsVersion.

CMake o herramientas externas ignoran la propiedad

  • Añade -D CMAKEVSGLOBALS=VCToolsVersion=14.38.33130 en la configuración.
  • En herramientas que invocan MSBuild indirectamente (por ejemplo, gestores de paquetes nativos), exporta también la variable de entorno: set VCToolsVersion=14.38.33130

Sincronización con el SDK de Windows

Unreal puede requerir un SDK concreto. Si al compilar aparecen errores de cabeceras o metadata del SDK, instala además el SDK de Windows que use tu rama del motor y selecciónalo en las propiedades del proyecto o en tus scripts de build. Mantén coherencia entre SDK y toolset.

Tabla de referencia de versiones

Plataforma de herramientasCarpeta MSVCVersión de cl.exeEntrega de VS 2022Notas
v14314.38.3313019.38.3313017.8Recomendada por varias ramas de Unreal para compatibilidad.
v14314.41.x19.41.x17.10Más reciente; convive con 14.38 y se puede seleccionar con VCToolsVersion.

Automatización en integración continua

En agentes de build, instala los Build Tools de VS 2022 con el componente de 14.38 y fuerza su uso en cada job.

PowerShell para fijar la subversión

$vs = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\2022\BuildTools"
$vcvars = Join-Path $vs "VC\Auxiliary\Build\vcvarsall.bat"
cmd /c "`"$vcvars`" x64 -vcvars_ver=14.38 &amp; set" | Out-Null
$env:VCToolsVersion = "14.38.33130"
msbuild MySolution.sln /m /p:VCToolsVersion=$env:VCToolsVersion /t:Rebuild /p:Configuration=Development /p:Platform=x64

Limpieza previa para evitar mezclas

git clean -xfd -e Saved

Elimina artefactos anteriores de C++ y conserva los datos de juego si están en Saved/.

Diagnóstico adicional útil

  • Ubicación del compilador activo: tras cargar el entorno, ejecuta: where cl Debería listar una ruta dentro de ...\VC\Tools\MSVC\14.38.33130\bin\Hostx64\x64\cl.exe.
  • Variables clave:
    • VCToolsVersion: nombre de carpeta MSVC que se usará.
    • VCToolsInstallDir: raíz del toolset activo.
    • VSINSTALLDIR: raíz de la instancia de Visual Studio.
  • Compatibilidad binaria: aunque v143 mantiene compatibilidad general, mezcla de subversiones con binarios precompilados suele causar problemas. Recompila dependencias nativas tras cambiar la subversión.

Preguntas frecuentes

¿Debo desinstalar la subversión más nueva? No. Mantén todas instaladas y selecciona la que necesitas por proyecto o por sesión.

¿Puedo mezclar librerías de 14.38 y 14.41? No es recomendable. Mezclar bibliotecas prebuilt con diferentes subversiones puede provocar LNK2038, LNK4099 u otros. Recompila todo con 14.38 si tu juego lo exige.

¿Afecta a proyectos de C#? No. Esto solo aplica a proyectos nativos de C++.

¿Qué hay del redistribuible del CRT? Los redistributables de la serie 14.x se actualizan en el sistema y mantienen compatibilidad hacia adelante. Aun así, usa el toolset que pide el motor y vuelve a publicar tu instalador si cambiaste de subversión de compilación para evitar sorpresas.

¿Cómo vuelvo a usar la subversión más reciente? Quita VCToolsVersion de tus propiedades o abre una consola con vcvarsall.bat x64 sin -vcvars_ver. Visual Studio elegirá la última disponible automáticamente.

Checklist de éxito

  • Instalado el componente “MSVC v143 (v14.38–17.8)”.
  • Existe ...\VC\Tools\MSVC\14.38.33130\ en disco.
  • Directory.Build.props con <VCToolsVersion>14.38.33130</VCToolsVersion> en la raíz de la solución.
  • Consola de desarrollador iniciada con -vcvars_ver=14.38 o MSBuild con /p:VCToolsVersion=14.38.33130.
  • Solución de Unreal limpiada y recompilada sin errores de enlace o CRT.

Resumen final

Para usar Unreal Engine con el toolchain que te pide, no necesitas desinstalar nada: agrega la subversión requerida del compilador, verifica su presencia y ordénale a tus builds que la usen. Con Directory.Build.props o /p:VCToolsVersion=14.38.33130 tendrás una selección reproducible, apta para equipos y CI, evitando incompatibilidades de binarios y errores de enlace. Tras limpiar y recompilar, tu proyecto quedará alineado con MSVC 14.38 y listo para trabajar con Unreal.

Índice