Share via


.vcxproj 檔案和萬用字元

Visual Studio IDE 不支援檔案中 .vcxproj 專案專案的某些建構。 這些不支援的建構包括萬用字元、分號分隔清單,或展開至多個檔案的 MSBuild 宏。 .vcxprojC++ 組建的專案系統比 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 中載入時不會顯示警告:

  • 明確列出所有專案
  • 將專案標示為唯讀
  • 將萬用字元專案移至目標主體

明確列出所有專案

目前,無法讓萬用字元擴充專案顯示在非唯讀專案的 方案總管 視窗中。 方案總管預期專案會明確列出所有專案。

若要讓 .vcxproj 專案在 Visual Studio 2019 16.7 版或更新版本中自動展開萬用字元,請將 屬性設定 ReplaceWildcardsInProjectItemstrue 。 建議您在根目錄中建立 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 中偵測到萬用字元,則無法使用專案快取。 如果您有許多使用萬用字元的專案,IDE 中的方案載入時間會更長。

將萬用字元專案移至目標主體

您可能想要使用萬用字元來收集資源、新增產生的來源等等。 如果您不需要列在 [方案總管] 視窗中,您可以改用此程式:

  1. 變更專案群組的名稱以新增萬用字元。 例如,而不是:

    <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 檔案移至匯入的檔案,這些萬用字元將不會顯示在方案總管視窗中。 這項變更也可讓您的專案在 IDE 中載入,而不需要修改。 不過,不建議使用此方法,因為它會停用專案快取。

另請參閱

在 Visual Studio 中設定 C ++ 編譯器和組建屬性
屬性頁面 XML 檔案