.vcxproj archivos y caracteres comodín

El IDE de Visual Studio no admite determinadas construcciones en elementos de proyecto en .vcxproj archivos. Estas construcciones no admitidas incluyen caracteres comodín, listas delimitadas por punto y coma o macros de MSBuild que se expanden a varios archivos. El sistema de proyectos .vcxproj para compilaciones de C++ es más restrictivo que MSBuild. Cada elemento de proyecto debe tener su propio elemento de MSBuild. Para obtener más información sobre el formato de archivo .vcxproj, vea .vcxproj y la estructura de archivos .props.

Estos ejemplos de construcción no son compatibles con el IDE:

<ItemGroup>
  <None Include="*.txt">
  <ClCompile Include="a.cpp;b.cpp"/>
  <ClCompile Include="@(SomeItems)" />
</ItemGroup>

Si un archivo de proyecto .vcxproj que incluye estas construcciones se carga en el IDE, es posible que el proyecto parezca funcionar al principio. Sin embargo, es probable que los problemas se modifiquen en cuanto Visual Studio modifique el proyecto y, a continuación, se guarden en el disco. Puede experimentar bloqueos aleatorios y un comportamiento indefinido.

En la versión 16.7 de Visual Studio 2019, cuando Visual Studio carga un archivo de proyecto .vcxproj, detecta automáticamente entradas no admitidas en los elementos del proyecto. Verá advertencias en la ventana Salida durante la carga de la solución.

Visual Studio 2019, versión 16.7, también agrega compatibilidad con proyectos de solo lectura. La compatibilidad de solo lectura permite al IDE usar proyectos creados manualmente que no tienen las limitaciones adicionales de los proyectos editables por IDE.

Si tiene un archivo .vcxproj que usa una o varias de las construcciones no admitidas, puede hacer que se cargue sin advertencias en el IDE mediante una de estas opciones:

  • Enumerar todos los elementos explícitamente
  • Marcar el proyecto como de solo lectura
  • Mover elementos comodín a un cuerpo de destino

Enumerar todos los elementos explícitamente

Actualmente, no hay ninguna manera de hacer que los elementos de expansión de caracteres comodín sean visibles en la ventana de Explorador de soluciones en un proyecto que no sea de solo lectura. Explorador de soluciones espera que los proyectos muestren todos los elementos explícitamente.

Para que los proyectos .vcxproj expandan automáticamente caracteres comodín en Visual Studio 2019 versión 16.7 o posterior, establezca la propiedad ReplaceWildcardsInProjectItems en true. Se recomienda crear un archivo Directory.Build.props en un directorio raíz y usar este contenido:

<Project>
  <PropertyGroup>
    <ReplaceWildcardsInProjectItems>true</ReplaceWildcardsInProjectItems>
  </PropertyGroup>
</Project>

Marcar el proyecto como de solo lectura

En Visual Studio 2019, versión 16.7 y posteriores, puede marcar proyectos como de solo lectura. Para marcar el proyecto de solo lectura, agregue la siguiente propiedad al archivo .vcxproj o a cualquiera de los archivos que importa:

<PropertyGroup>
    <ReadOnlyProject>true</ReadOnlyProject>
</PropertyGroup>

La configuración <ReadOnlyProject> impide que Visual Studio edite y guarde el proyecto, por lo que puede usar cualquier construcción de MSBuild en él, incluidos los caracteres comodín.

Es importante saber que la memoria caché del proyecto no está disponible si Visual Studio detecta caracteres comodín en los elementos del proyecto en el archivo .vcxproj o en cualquiera de sus importaciones. Los tiempos de carga de la solución en el IDE son mucho más largos si tiene muchos proyectos que usan caracteres comodín.

Mover elementos comodín a un cuerpo de destino

Es posible que quiera usar caracteres comodín para recopilar recursos, agregar orígenes generados, etc. Si no los necesita en la ventana Explorador de soluciones, puede usar este procedimiento en su lugar:

  1. Cambie el nombre del grupo de elementos para agregar caracteres comodín. Por ejemplo, en lugar de:

    <Image Include="*.bmp" />
    <ClCompile Include="*.cpp" />
    

    Cámbielo por esto:

    <_WildCardImage Include="*.bmp" />
    <_WildCardClCompile Include="*.cpp" />
    
  2. Agregue este contenido al archivo .vcxproj. O bien, agréguelo a un archivo Directory.Build.targets en un directorio raíz para afectar a todos los proyectos de esa raíz:

    <Target Name="AddWildCardItems"
        AfterTargets="BuildGenerateSources">
      <ItemGroup>
        <Image Include="@(_WildCardImage)" />
        <ClCompile Include="@(_WildCardClCompile)" />
      </ItemGroup>
    </Target>
    

    Este cambio hace que la compilación vea los elementos tal y como se definen en el archivo .vcxproj. Sin embargo, ahora no están visibles en la ventana de Explorador de soluciones y no causarán problemas en el IDE.

  3. Para mostrar IntelliSense correcto para los elementos _WildCardClCompile al abrir esos archivos en el editor, agregue el siguiente contenido:

    <PropertyGroup>
      <ComputeCompileInputsTargets>
        AddWildCardItems
        $(ComputeCompileInputsTargets)
      </ComputeCompileInputsTargets>
    </PropertyGroup>
    

De hecho, puede usar caracteres comodín para cualquier elemento dentro de un cuerpo de destino. También puede usar caracteres comodín en un objeto ItemGroup que no esté definido como un elemento de proyecto por ProjectSchemaDefinition.

Nota:

Si mueve caracteres comodín incluye de un archivo .vcxproj a un archivo importado, no estarán visibles en la ventana Explorador de soluciones. Este cambio también permite que el proyecto se cargue en el IDE sin modificaciones. Sin embargo, no se recomienda este enfoque, ya que deshabilita la memoria caché del proyecto.

Consulte también

Establecimiento del compilador de C++ y de propiedades de compilación en Visual Studio
Archivos XML de página de propiedades