.vcxproj
檔案和萬用字元
Visual Studio IDE 不支援檔案中 .vcxproj
專案專案的某些建構。 這些不支援的建構包括萬用字元、分號分隔清單,或展開至多個檔案的 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 中載入時不會顯示警告:
- 明確列出所有專案
- 將專案標示為唯讀
- 將萬用字元專案移至目標主體
明確列出所有專案
目前,無法讓萬用字元擴充專案顯示在非唯讀專案的 方案總管 視窗中。 方案總管預期專案會明確列出所有專案。
若要讓 .vcxproj
專案在 Visual Studio 2019 16.7 版或更新版本中自動展開萬用字元,請將 屬性設定 ReplaceWildcardsInProjectItems
為 true
。 建議您在根目錄中建立 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 中的方案載入時間會更長。
將萬用字元專案移至目標主體
您可能想要使用萬用字元來收集資源、新增產生的來源等等。 如果您不需要列在 [方案總管] 視窗中,您可以改用此程式:
變更專案群組的名稱以新增萬用字元。 例如,而不是:
<Image Include="*.bmp" /> <ClCompile Include="*.cpp" />
將它變更為:
<_WildCardImage Include="*.bmp" /> <_WildCardClCompile Include="*.cpp" />
將此內容新增至您的
.vcxproj
檔案。 或者,將它新增至Directory.Build.targets
根目錄中的檔案,以影響該根目錄下的所有專案:<Target Name="AddWildCardItems" AfterTargets="BuildGenerateSources"> <ItemGroup> <Image Include="@(_WildCardImage)" /> <ClCompile Include="@(_WildCardClCompile)" /> </ItemGroup> </Target>
這項變更會使組建在檔案中
.vcxproj
定義時看到專案。 不過,現在它們不會顯示在 [方案總管] 視窗中,而且不會在 IDE 中造成問題。若要在
_WildCardClCompile
編輯器中開啟這些檔案時顯示專案的正確 IntelliSense,請新增下列內容:<PropertyGroup> <ComputeCompileInputsTargets> AddWildCardItems $(ComputeCompileInputsTargets) </ComputeCompileInputsTargets> </PropertyGroup>
實際上,您可以將萬用字元用於目標主體內的任何專案。 您也可以在 ItemGroup
中,使用未由 ProjectSchemaDefinition
定義為專案專案的萬用字元。
注意
如果您將萬用字元包含從 .vcxproj
檔案移至匯入的檔案,這些萬用字元將不會顯示在方案總管視窗中。 這項變更也可讓您的專案在 IDE 中載入,而不需要修改。 不過,不建議使用此方法,因為它會停用專案快取。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應