Habilitar Client‑ProjFS en Windows Server 2019 para Visual Studio 2022: guía completa y solución a escala

¿Visual Studio 2022 no se instala en Windows Server 2019 por culpa de Client‑ProjFS? Esta guía práctica explica por qué aparece el error “The referenced assembly could not be found. (Error 14081)”, confirma que la característica Client‑ProjFS sí existe en Server 2019 y ofrece un plan de remediación fiable, automatizable y validado en laboratorio.

Índice

Resumen del problema

En diversas instalaciones de Windows Server 2019, la característica Client‑ProjFS no se muestra en el asistente gráfico y su habilitación mediante DISM o PowerShell falla con el mensaje:

Error: 14081
The referenced assembly could not be found.

Esto impide completar la instalación de Visual Studio 2022, que requiere el Projected File System (ProjFS) del sistema operativo.

Respuesta corta

Sí, Client‑ProjFS está disponible en Windows Server 2019. Si falla su instalación, el problema no es que la característica no exista, sino que falta el “payload” en la imagen (por personalizaciones del WIM, políticas/WSUS que bloquean componentes opcionales o corrupción de la Tienda de Componentes). En un Server 2019 limpio y actualizado, Client‑ProjFS se habilita sin errores. Por lo tanto, la causa raíz reside en la imagen corporativa y/o en la ruta de origen de los binarios, no en el producto.

Qué es ProjFS y por qué importa

Projected File System (ProjFS) es un filtro de sistema de archivos que permite proyectar estructuras de archivos bajo demanda sin materializarlas por completo en disco. Visual Studio 2022 y herramientas relacionadas se apoyan en este subsistema para ciertas experiencias de desarrollo y repositorios grandes. En Windows Server 2019 el componente de cliente se expone como Client‑ProjFS.

Por qué falla la habilitación

  • Payload ausente: La organización “adelgazó” el WIM o aplicó debloating que retiró optional features de WinSxS.
  • WSUS o directivas: Políticas que impiden descargar componentes opcionales y contenido de reparación desde Windows Update.
  • Corrupción en la Tienda de Componentes: Inconsistencias detectadas al reparar con DISM/SFC.
  • Desfase de build: Se intenta instalar con una fuente que no coincide en edición, idioma, arquitectura o nivel de parches.

Comprobaciones previas

  • Actualizar el sistema: Aplique las últimas SSU/LCU antes de operar.
  • Confirmar edición y build: Get-ComputerInfo | Select-Object OsName, OsVersion, OsBuildNumber, OsArchitecture
  • Ver el estado de la característica: Get-WindowsOptionalFeature -Online -FeatureName Client-ProjFS
  • Comprobar la tienda de componentes: DISM /Online /Cleanup-Image /AnalyzeComponentStore

Plan de acción recomendado

  1. Reparar el sistema sfc /scannow DISM /Online /Cleanup-Image /RestoreHealth Reinicie el servidor al finalizar.
  2. Habilitar la característica PowerShell: Enable-WindowsOptionalFeature -Online -FeatureName Client-ProjFS -All -NoRestart DISM: DISM /Online /Enable-Feature /FeatureName:Client-ProjFS /All
  3. Si persiste “referenced assembly could not be found”
    • Usar una fuente local que coincida con el build (ISO de Server 2019 de la misma edición/idioma/nivel de parches). Identifique el índice correcto:
    DISM /Get-WimInfo /WimFile:X:\sources\install.wim Habilite con /Source y sin contactar Windows Update: DISM /Online /Enable-Feature /FeatureName:Client-ProjFS /All ^ /Source:WIM:X:\sources\install.wim:INDEX /LimitAccess Reemplace X: e INDEX según corresponda a su edición.
    • Revisar la directiva Especificar la configuración para la instalación de componentes opcionales y reparación y habilitar Descargar contenido de reparación y características opcionales directamente de Windows Update si usa WSUS, o mantenga /Source como arriba.
    • Auditar características relacionadas: DISM /Online /Get-Features /Format:Table | findstr /I Proj
    • Leer los logs: C:\Windows\Logs\DISM\dism.log y C:\Windows\Logs\CBS\CBS.log para identificar manifiestos faltantes.
  4. Si la imagen está dañada o “adelgazada”
    • Reparación in‑place con un ISO de Server 2019 igual o más reciente, preservando roles/datos.
    • Reconstruir la imagen base desde un ISO limpio y evitar scripts que eliminen optional features necesarias.
  5. Validación a escala
    • Probar primero en laboratorio/VM; después, aplicar el método elegido (fuente local, política o in‑place) a los servidores afectados.

Verificación posterior

  • Estado de la característica: Get-WindowsOptionalFeature -Online -FeatureName Client-ProjFS | Select-Object State
  • Filtro cargado: fltmc filters | findstr /I prjflt
  • Servicio del controlador: sc query prjflt
  • Archivo del controlador: dir C:\Windows\System32\drivers\prjflt.sys

Automatización para aplicarlo a decenas de servidores

El siguiente script intenta una habilitación online y, si falla, recurre a una fuente WIM compartida. También ejecuta SFC/DISM de reparación y genera un informe resumido.

# Script de habilitación de Client-ProjFS a escala
Requisitos: PowerShell Remoting habilitado, permisos locales de administrador

param(
\[Parameter(Mandatory=\$true)]\[string\[]]\$Servers,
\[Parameter(Mandatory=\$false)]\[string]\$WimPath = "\fileserver\isos\WS2019\sources\install.wim",
\[Parameter(Mandatory=\$false)]\[int]\$WimIndex = 2, # Ajuste según su edición
\[switch]\$SkipRepair
)

\$results = @()

Invoke-Command -ComputerName \$Servers -ScriptBlock {
param(\$WimPath, \$WimIndex, \$SkipRepair)

function Write-Log(\$m){ "{0\:u} - {1}" -f (Get-Date), \$m | Out-Host }

try {
Start-Transcript -Path "\$env\:SystemDrive\Temp\Client-ProjFS-Enable.log" -Force | Out-Null
} catch {}

if(-not \$SkipRepair){
Write-Log "Ejecutando SFC/DISM de reparación..."
sfc /scannow | Out-Null
DISM /Online /Cleanup-Image /RestoreHealth | Out-Null
Write-Log "Reinicio pendiente: \$((Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing').RebootInProgress -eq 1)"
}

Write-Log "Intento 1: Enable-WindowsOptionalFeature online"
\$online = Enable-WindowsOptionalFeature -Online -FeatureName Client-ProjFS -All -NoRestart -ErrorAction SilentlyContinue
if(\$? -and \$online.State -match 'Enabled'){
\$status = 'EnabledOnline'
} else {
Write-Log "Falla online. Intento 2: DISM con WIM de origen"
\$cmd = "DISM /Online /Enable-Feature /FeatureName\:Client-ProjFS /All /Source\:WIM:\$WimPath\`:\$WimIndex /LimitAccess"
Write-Log \$cmd
\$p = Start-Process -FilePath dism.exe -ArgumentList "/Online","/Enable-Feature","/FeatureName\:Client-ProjFS","/All","/Source\:WIM:\$WimPath:\$WimIndex","/LimitAccess" -PassThru -Wait -NoNewWindow
\$status = if(\$p.ExitCode -eq 0){ 'EnabledFromWim' } else { "FailedExitCode:\$(\$p.ExitCode)" }
}

\$state = (Get-WindowsOptionalFeature -Online -FeatureName Client-ProjFS).State
\$drv   = (fltmc filters | Select-String -Pattern 'prjflt').ToString()
\$svc   = (sc.exe query prjflt) -join ' '

\[PSCustomObject]@{
ComputerName = \$env\:COMPUTERNAME
Result       = \$status
FeatureState = \$state
PrjFltLoaded = \[bool]\$drv
ServiceLine  = \$svc
}
} -ArgumentList \$WimPath, \$WimIndex, \$SkipRepair | ForEach-Object { \$results += $\_ }

\$results | Format-Table -AutoSize
\$csv = Join-Path \$PWD "Client-ProjFS-Results-\$(Get-Date -Format yyyyMMdd-HHmmss).csv"
\$results | Export-Csv -NoTypeInformation -Encoding UTF8 -Path \$csv
Write-Host "Informe: \$csv"

Buenas prácticas de origen y coincidencia de la imagen

Para minimizar errores:

  • Emparejar edición e idioma: Standard/Datacenter, Core/Desktop Experience, y el idioma deben coincidir.
  • Emparejar arquitectura: x64 con x64.
  • Emparejar nivel de parche: Idealmente usar un ISO slipstreamed o permitir que DISM instale desde WU si su política lo autoriza.
  • Usar el índice correcto: Descúbralo con DISM /Get-WimInfo /WimFile:<ruta>.

Preguntas frecuentes

¿Por qué no aparece en el asistente gráfico?
Algunas características de cliente (como Client‑ProjFS) no se exponen en el asistente de Roles y características. Utilice DISM o PowerShell.

¿Funciona en Server Core?
Sí, siempre que el payload esté presente o disponible vía /Source o Windows Update conforme a política.

¿Hace falta reiniciar?
Normalmente no, pero si el controlador prjflt queda pendiente de carga, un reinicio asegura que el filtro se registre.

¿Qué significa el Error 14081?
Que falta algún ensamblado/manifiesto requerido. Se corrige aportando una fuente válida o reparando la Tienda de Componentes.

Errores comunes y soluciones

MensajeCausaAcción correctiva
Error 14081: The referenced assembly could not be found.Payload ausente o manifiestos faltantes.Usar /Source:WIM:...:INDEX coincidente; revisar DISM/CBS logs; ejecutar /RestoreHealth.
Error 0x800f0954Bloqueo por WSUS/política para descargar componentes opcionales.Habilitar en GPO la descarga directa desde Windows Update o proporcionar /Source.
Error 0x800f081fFuente inválida o no coincidente.Verificar edición/idioma/arquitectura/índice; usar WIM correcto.
No aparece en GUILa característica no se expone en el asistente.Usar DISM/PowerShell (Enable-WindowsOptionalFeature).

Checklist de implementación rápida

  • Actualizar SSU/LCU.
  • Ejecutar sfc /scannow y DISM /RestoreHealth.
  • Intentar habilitar online con PowerShell/DISM.
  • Si falla, identificar índice del WIM y habilitar con /Source + /LimitAccess.
  • Revisar GPO de componentes opcionales si usa WSUS.
  • Validar: Get-WindowsOptionalFeature, fltmc filters, sc query prjflt.

Apéndice de mantenimiento preventivo

  • No “adelgazar” en exceso la imagen base: evite eliminar optional features sin gobernanza.
  • Repositorio de ISOs versionado y accesible: mantenga WIMs por edición/idioma/patchlevel.
  • Política estandarizada para “Componentes opcionales y reparación” alineada con WSUS.
  • Supervisión de la Tienda de Componentes: programe DISM /AnalyzeComponentStore mensualmente.

Procedimiento para imágenes fuera de línea

Si mantiene golden images, puede dejar Client‑ProjFS prehabilitado en un WIM offline:

REM 1) Montar la imagen correcta
DISM /Mount-Image /ImageFile:D:\isos\WS2019\sources\install.wim /Index:2 /MountDir:C:\Mount

REM 2) Habilitar la característica en la imagen montada
DISM /Image\:C:\Mount /Enable-Feature /FeatureName\:Client-ProjFS /All

REM 3) Confirmar el estado
DISM /Image\:C:\Mount /Get-Features /Format\:Table | findstr /I Proj

REM 4) Confirmar que no hay acciones pendientes
DISM /Image\:C:\Mount /Cleanup-Image /CheckHealth

REM 5) Confirmar y desmontar guardando cambios
DISM /Unmount-Image /MountDir\:C:\Mount /Commit

Recuerde usar el índice adecuado de su edición y validar integridad antes de capturar la imagen.

Notas útiles

  • En Server 2019 la característica puede no aparecer en el asistente gráfico; la vía soportada es DISM/PowerShell.
  • Mantenga el sistema totalmente actualizado antes de habilitar la característica.
  • Visual Studio 2022 requiere Projected File System; el nombre de la característica en Windows es Client‑ProjFS.

Resultado verificado en laboratorio

En una instalación limpia de Windows Server 2019 (VM en Hyper‑V), completamente actualizada y sin personalizaciones, la habilitación de Client‑ProjFS se completó sin incidencias. La conclusión es inequívoca: la raíz del problema es la imagen corporativa (payload eliminado/bloqueado o corrupción). La solución es reparar el sistema o reaprovisionar desde un origen limpio y ajustar políticas/fuentes para que el payload esté disponible en todos los servidores.

Resumen ejecutivo

Client‑ProjFS sí existe y funciona en Windows Server 2019. El error 14081 indica que falta la fuente del componente, no que el sistema no lo soporte. Con SFC/DISM, una política adecuada y, de ser necesario, un WIM coincidente, su activación es reproducible y escalable. Incorpore estas prácticas a su imagen base y a su pipeline de aprovisionamiento para evitar reincidencias.

Comandos clave recopilados

sfc /scannow
DISM /Online /Cleanup-Image /RestoreHealth
DISM /Online /Enable-Feature /FeatureName:Client-ProjFS /All
DISM /Get-WimInfo /WimFile:X:\sources\install.wim
DISM /Online /Enable-Feature /FeatureName:Client-ProjFS /All ^
  /Source:WIM:X:\sources\install.wim:INDEX /LimitAccess
DISM /Online /Get-Features /Format:Table | findstr /I Proj
fltmc filters | findstr /I prjflt
sc query prjflt

Con este procedimiento, Visual Studio 2022 dejará de fallar por la dependencia de ProjFS y sus servidores quedarán estandarizados para futuros despliegues.

Índice