.vcxproj
file dan kartubebas
IDE Visual Studio tidak mendukung konstruksi tertentu dalam item proyek dalam .vcxproj
file. Konstruksi yang tidak didukung ini mencakup wildcard, daftar yang dibatasi titik koma, atau makro MSBuild yang meluas ke beberapa file. Sistem .vcxproj
proyek untuk build C++ lebih ketat daripada MSBuild. Setiap item proyek diperlukan untuk memiliki item MSBuild sendiri. Untuk informasi selengkapnya tentang .vcxproj
format file, lihat .vcxproj
dan .props
struktur file.
Contoh konstruksi ini tidak didukung oleh IDE:
<ItemGroup>
<None Include="*.txt">
<ClCompile Include="a.cpp;b.cpp"/>
<ClCompile Include="@(SomeItems)" />
</ItemGroup>
.vcxproj
Jika file proyek yang menyertakan konstruksi ini dimuat dalam IDE, proyek mungkin tampaknya berfungsi pada awalnya. Namun, masalah kemungkinan segera setelah proyek dimodifikasi oleh Visual Studio lalu disimpan di disk. Anda mungkin mengalami crash acak dan perilaku yang tidak ditentukan.
Di Visual Studio 2019 versi 16.7, saat Visual Studio memuat .vcxproj
file proyek, visual Studio secara otomatis mendeteksi entri yang tidak didukung dalam item proyek. Anda akan melihat peringatan di jendela Output selama beban solusi.
Visual Studio 2019 versi 16.7 juga menambahkan dukungan proyek baca-saja. Dukungan baca-saja memungkinkan IDE untuk menggunakan proyek yang ditulis secara manual yang tidak memiliki batasan tambahan proyek yang dapat diedit IDE.
Jika Anda memiliki .vcxproj
file yang menggunakan satu atau beberapa konstruksi yang tidak didukung, Anda dapat membuatnya dimuat tanpa peringatan di IDE dengan menggunakan salah satu opsi ini:
- Mencantumkan semua item secara eksplisit
- Tandai proyek Anda sebagai baca-saja
- Memindahkan item kartubebas ke isi target
Mencantumkan semua item secara eksplisit
Saat ini, tidak ada cara untuk membuat item ekspansi kartubebas terlihat di jendela Penjelajah Solusi dalam proyek non-baca-saja. Penjelajah Solusi mengharapkan proyek untuk mencantumkan semua item secara eksplisit.
Untuk membuat .vcxproj
proyek secara otomatis memperluas kartubebas di Visual Studio 2019 versi 16.7 atau yang lebih baru, atur properti ke true
ReplaceWildcardsInProjectItems
. Kami sarankan Anda membuat Directory.Build.props
file di direktori akar, dan menggunakan konten ini:
<Project>
<PropertyGroup>
<ReplaceWildcardsInProjectItems>true</ReplaceWildcardsInProjectItems>
</PropertyGroup>
</Project>
Tandai proyek Anda sebagai baca-saja
Di Visual Studio 2019 versi 16.7 dan yang lebih baru, Anda dapat menandai proyek sebagai baca-saja. Untuk menandai proyek Anda baca-saja, tambahkan properti berikut ke file Anda .vcxproj
, atau ke salah satu file yang diimpornya:
<PropertyGroup>
<ReadOnlyProject>true</ReadOnlyProject>
</PropertyGroup>
Pengaturan mencegah <ReadOnlyProject>
Visual Studio mengedit dan menyimpan proyek, sehingga Anda dapat menggunakan konstruksi MSBuild apa pun di dalamnya, termasuk kartubebas.
Penting untuk diketahui bahwa cache proyek tidak tersedia jika Visual Studio mendeteksi kartubebas dalam item proyek dalam .vcxproj
file atau salah satu impornya. Waktu pemuatan solusi dalam IDE jauh lebih lama jika Anda memiliki banyak proyek yang menggunakan kartubebas.
Memindahkan item kartubebas ke isi target
Anda mungkin ingin menggunakan kartubebas untuk mengumpulkan sumber daya, menambahkan sumber yang dihasilkan, dan sebagainya. Jika Anda tidak memerlukannya tercantum di jendela Penjelajah Solusi, Anda dapat menggunakan prosedur ini sebagai gantinya:
Ubah nama grup item untuk menambahkan kartubebas. Misalnya, alih-alih:
<Image Include="*.bmp" /> <ClCompile Include="*.cpp" />
ubah menjadi:
<_WildCardImage Include="*.bmp" /> <_WildCardClCompile Include="*.cpp" />
Tambahkan isi ini ke file Anda
.vcxproj
. Atau, tambahkan keDirectory.Build.targets
file di direktori akar, untuk memengaruhi semua proyek di bawah akar tersebut:<Target Name="AddWildCardItems" AfterTargets="BuildGenerateSources"> <ItemGroup> <Image Include="@(_WildCardImage)" /> <ClCompile Include="@(_WildCardClCompile)" /> </ItemGroup> </Target>
Perubahan ini membuat build melihat item seperti yang ditentukan dalam
.vcxproj
file. Namun, sekarang tidak terlihat di jendela Penjelajah Solusi, dan tidak akan menyebabkan masalah dalam IDE.Untuk menampilkan IntelliSense yang benar untuk
_WildCardClCompile
item saat Anda membuka file tersebut di editor, tambahkan konten berikut:<PropertyGroup> <ComputeCompileInputsTargets> AddWildCardItems $(ComputeCompileInputsTargets) </ComputeCompileInputsTargets> </PropertyGroup>
Secara efektif, Anda dapat menggunakan kartubebas untuk item apa pun di dalam isi target. Anda juga dapat menggunakan kartubebas dalam ItemGroup
yang tidak didefinisikan sebagai item proyek oleh ProjectSchemaDefinition
.
Catatan
Jika Anda memindahkan kartubebas termasuk dari .vcxproj
file ke file yang diimpor, kartubebas tersebut tidak akan terlihat di jendela Penjelajah Solusi. Perubahan ini juga memungkinkan proyek Anda untuk memuat ide tanpa modifikasi. Namun, kami tidak merekomendasikan pendekatan ini, karena menonaktifkan cache proyek.
Baca juga
Mengatur properti kompilator dan build C++ di Visual Studio
File XML Halaman Properti
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk