.vcxproj파일 및 wild카드s

Visual Studio IDE는 파일의 프로젝트 항목 .vcxproj 에서 특정 구문을 지원하지 않습니다. 지원되지 않는 구문에는 wild카드s, 세미콜론으로 구분된 목록 또는 여러 파일로 확장되는 MSBuild 매크로가 포함됩니다. .vcxproj C++ 빌드용 프로젝트 시스템은 MSBuild보다 더 제한적입니다. 각 프로젝트 항목에는 고유한 MSBuild 항목이 있어야 합니다. 파일 형식에 대한 .vcxproj 자세한 내용은 파일 구조를 참조 .vcxproj 하세요.props.

이러한 구문 예제는 IDE에서 지원되지 않습니다.

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

.vcxproj 이러한 구문을 포함하는 프로젝트 파일이 IDE에 로드되면 처음에는 프로젝트가 작동하는 것처럼 보일 수 있습니다. 그러나 Visual Studio에서 프로젝트를 수정한 다음 디스크에 저장하는 즉시 문제가 발생할 수 있습니다. 임의 크래시 및 정의되지 않은 동작이 발생할 수 있습니다.

Visual Studio 2019 버전 16.7에서는 Visual Studio에서 프로젝트 파일을 로드 .vcxproj 하면 프로젝트 항목에서 지원되지 않는 항목을 자동으로 검색합니다. 솔루션을 로드하는 동안 출력 창에 경고가 표시됩니다.

Visual Studio 2019 버전 16.7은 읽기 전용 프로젝트 지원도 추가합니다. 읽기 전용 지원을 사용하면 IDE에서 IDE 편집 가능 프로젝트의 추가 제한 사항이 없는 수동으로 작성된 프로젝트를 사용할 수 있습니다.

지원되지 않는 구문 중 하나 이상을 사용하는 파일이 있는 경우 .vcxproj 다음 옵션 중 하나를 사용하여 IDE에서 경고 없이 로드할 수 있습니다.

  • 모든 항목을 명시적으로 나열
  • 프로젝트를 읽기 전용으로 표시
  • 와일드카드 항목을 대상 본문으로 이동

모든 항목을 명시적으로 나열

현재는 읽기 전용이 아닌 프로젝트의 솔루션 탐색기 창에 야생 카드 확장 항목을 표시할 수 있는 방법이 없습니다. 솔루션 탐색기 프로젝트에서 모든 항목을 명시적으로 나열해야 합니다.

Visual Studio 2019 버전 16.7 이상에서 프로젝트가 자동으로 야생 카드 확장되도록 .vcxproj 하려면 속성을 true<>ReplaceWildcardsInProjectItems/>로 설정합니다. 루트 디렉터리에 파일을 만들고 Directory.Build.props 다음 콘텐츠를 사용하는 것이 좋습니다.

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

프로젝트를 읽기 전용으로 표시

Visual Studio 2019 버전 16.7 이상에서는 프로젝트를 읽기 전용으로 표시할 수 있습니다. 프로젝트를 읽기 전용으로 .vcxproj 표시하려면 파일 또는 가져오는 파일에 다음 속성을 추가합니다.

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

<ReadOnlyProject> 설정을 사용하면 Visual Studio에서 프로젝트를 편집하고 저장할 수 없으므로 야생 카드 포함한 MSBuild 구문을 사용할 수 있습니다.

Visual Studio가 파일 또는 해당 가져오기의 프로젝트 항목 .vcxproj 에서 야생 카드 검색하는 경우 프로젝트 캐시를 사용할 수 없다는 것을 알아야 합니다. wild카드s를 사용하는 프로젝트가 많은 경우 IDE의 솔루션 로드 시간이 훨씬 더 깁니다.

와일드카드 항목을 대상 본문으로 이동

wild카드를 사용하여 리소스를 수집하고, 생성된 원본을 추가하는 등의 작업을 수행할 수 있습니다. 솔루션 탐색기 창에 나열할 필요가 없는 경우 이 절차를 대신 사용할 수 있습니다.

  1. 항목 그룹의 이름을 변경하여 wild카드 추가합니다. 예를 들어 다음 대신 다음을 수행합니다.

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

    다음으로 변경합니다.

    <_WildCardImage Include="*.bmp" />
    <_WildCardClCompile Include="*.cpp" />
    
  2. 이 콘텐츠를 파일에 추가합니다 .vcxproj . 또는 루트 디렉터리의 파일에 추가 Directory.Build.targets 하여 해당 루트 아래의 모든 프로젝트에 영향을 미칩니다.

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

    이렇게 변경하면 파일에 정의된 대로 빌드에 항목이 .vcxproj 표시됩니다. 그러나 이제는 솔루션 탐색기 창에 표시되지 않으며 IDE에서 문제를 일으키지 않습니다.

  3. 편집기에서 해당 파일을 열 때 항목에 대해 _WildCardClCompile 올바른 IntelliSense를 표시하려면 다음 콘텐츠를 추가합니다.

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

효과적으로 대상 본문 내의 모든 항목에 대해 야생 카드 사용할 수 있습니다. 에 의해 프로젝트 항목으로 정의되지 않은 야생 카드 ItemGroup 사용할 수도 있습니다ProjectSchemaDefinition.

참고 항목

파일에서 .vcxproj 가져온 파일로 wild카드 포함을 이동하면 솔루션 탐색기 창에 표시되지 않습니다. 또한 이 변경을 통해 프로젝트를 수정하지 않고 IDE에 로드할 수 있습니다. 그러나 프로젝트 캐시를 사용하지 않도록 설정하므로 이 방법은 권장하지 않습니다.

참고 항목

Visual Studio에서 C++ 컴파일러 및 빌드 속성 설정
속성 페이지 XML 파일