Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Solusi adalah struktur untuk mengatur proyek di Visual Studio. Solusi ini mempertahankan informasi status untuk proyek dalam dua file:
.slnfile (berbasis teks, dibagikan).suofile (biner, opsi solusi khusus pengguna)
Untuk informasi selengkapnya tentang file .suo, lihat File Opsi Pengguna Solusi (.suo).
Jika VSPackage Anda dimuat karena direferensikan dalam .sln file, lingkungan akan memanggil ReadSolutionProps untuk membaca dalam .sln file.
File .sln berisi informasi berbasis teks yang digunakan lingkungan untuk menemukan dan memuat parameter nilai nama untuk data yang dipertahankan dan proyek VSPackages yang dirujuknya. Ketika pengguna membuka solusi, lingkungan menelusuri preSolutioninformasi , , Projectdan postSolution dalam .sln file untuk memuat solusi, proyek dalam solusi, dan informasi tetap apa pun yang melekat pada solusi.
Setiap file proyek berisi informasi tambahan yang dibaca oleh lingkungan untuk mengisi hierarki dengan item proyek tersebut. Persistensi data hierarki dikendalikan oleh proyek. Data biasanya tidak disimpan dalam .sln file, meskipun Anda sengaja dapat menulis informasi proyek ke .sln file jika Anda memilih untuk melakukannya. Untuk informasi selengkapnya tentang persistensi, lihat Persistensi Proyek dan Membuka dan Menyimpan Item Proyek.
Header file
Header .sln file terlihat seperti ini:
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.2.32505.173
MinimumVisualStudioVersion = 10.0.40219.1
Definisi
Microsoft Visual Studio Solution File, Format Version 12.00
Header standar yang menentukan versi format file.
# Visual Studio Version 17
Versi utama Visual Studio yang (terbaru) menyimpan file solusi ini. Informasi ini mengontrol nomor versi di ikon solusi.
VisualStudioVersion = 17.2.32505.173
Versi lengkap Visual Studio yang (terbaru) menyimpan file solusi. Jika file solusi disimpan oleh versi Visual Studio yang lebih baru yang memiliki versi utama yang sama. Nilai ini tidak diperbarui sehingga mengurangi churn dalam file.
MinimumVisualStudioVersion = 10.0.40219.1
Versi minimum (terlama) Visual Studio yang dapat membuka file solusi ini.
Isi file
Isi .sln file terdiri dari beberapa bagian berlabel GlobalSection, seperti ini:
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Project1", "Project1.vbproj", "{8CDD8387-B905-44A8-B5D5-07BB50E05BEA}"
EndProject
Global
GlobalSection(SolutionNotes) = postSolution
EndGlobalSection
GlobalSection(SolutionConfiguration) = preSolution
ConfigName.0 = Debug
ConfigName.1 = Release
EndGlobalSection
GlobalSection(ProjectDependencies) = postSolution
EndGlobalSection
GlobalSection(ProjectConfiguration) = postSolution
{8CDD8387-B905-44A8-B5D5-07BB50E05BEA}.Debug.ActiveCfg = Debug|x86
{8CDD8387-B905-44A8-B5D5-07BB50E05BEA}.Debug.Build.0 = Debug|x86
{8CDD8387-B905-44A8-B5D5-07BB50E05BEA}.Release.ActiveCfg = Release|x86
{8CDD8387-B905-44A8-B5D5-07BB50E05BEA}.Release.Build.0 = Release|x86
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
EndGlobalSection
GlobalSection(ExtensibilityAddIns) = postSolution
EndGlobalSection
EndGlobal
Untuk memuat solusi, lingkungan melakukan urutan tugas berikut:
Lingkungan membaca bagian Global dari
.slnfile dan memproses semua bagian yang ditandaipreSolution. Dalam contoh file ini, ada satu pernyataan seperti itu:GlobalSection(SolutionConfiguration) = preSolution ConfigName.0 = Debug ConfigName.1 = ReleaseKetika lingkungan membaca
GlobalSection('name')tag, lingkungan memetakan nama ke VSPackage menggunakan registri. Nama kunci harus ada di registri di bawah[HKLM\\<Application ID Registry Root\>\SolutionPersistence\AggregateGUIDs]. Nilai default kunci adalah GUID Paket (REG_SZ) dari VSPackage yang menulis entri.Lingkungan memuat VSPackage, memanggil
QueryInterfaceVSPackage untuk IVsPersistSolutionProps antarmuka, dan memanggil ReadSolutionProps metode dengan data di bagian sehingga VSPackage dapat menyimpan data. Lingkungan mengulangi proses ini untuk setiappreSolutionbagian.Lingkungan melakukan iterasi melalui blok persistensi proyek. Dalam hal ini, ada satu proyek.
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Project1", "Project1.vbproj", "{8CDD8387-B905-44A8-B5D5-07BB50E05BEA}" EndProjectPernyataan ini berisi GUID proyek unik dan jenis proyek GUID. Informasi ini digunakan oleh lingkungan untuk menemukan file proyek atau file milik solusi, dan VSPackage yang diperlukan untuk setiap proyek. GUID proyek diteruskan ke IVsProjectFactory untuk memuat VSPackage tertentu yang terkait dengan proyek, lalu proyek dimuat oleh VSPackage. Dalam hal ini, VSPackage yang dimuat untuk proyek ini adalah Visual Basic.
Setiap proyek dapat mempertahankan ID instans proyek yang unik sehingga dapat diakses sesuai kebutuhan oleh proyek lain dalam solusi. Idealnya, jika solusi dan proyek berada di bawah kontrol kode sumber, jalur ke proyek harus relatif terhadap jalur solusi. Ketika solusi pertama kali dimuat, file proyek tidak dapat berada di komputer pengguna. Dengan memiliki file proyek yang disimpan di server relatif terhadap file solusi, lebih mudah untuk file proyek ditemukan dan disalin ke komputer pengguna. Kemudian menyalin dan memuat sisa file yang diperlukan untuk proyek.
Berdasarkan informasi yang terkandung di bagian
.slnproyek file, lingkungan memuat setiap file proyek. Proyek itu sendiri kemudian bertanggung jawab untuk mengisi hierarki proyek dan memuat proyek berlapis apa pun.Setelah semua bagian file diproses
.sln, solusi ditampilkan di Penjelajah Solusi dan siap untuk modifikasi oleh pengguna.
Jika ada proyek dalam solusi yang mengimplementasikan VSPackage gagal dimuat, OnProjectLoadFailure metode ini dipanggil dan semua proyek dalam solusi mengabaikan perubahan yang mungkin telah dilakukan selama pemuatan. Untuk kesalahan penguraian apa pun, sebanyak mungkin informasi dipertahankan dengan file solusi. Lingkungan menampilkan kotak dialog yang memperingatkan pengguna bahwa solusi rusak.
Ketika solusi disimpan atau ditutup, QuerySaveSolutionProps metode dipanggil. Ini diteruskan ke hierarki untuk melihat apakah perubahan telah dilakukan pada solusi yang perlu dimasukkan ke .sln dalam file. Nilai null, diteruskan ke QuerySaveSolutionProps dalam VSQUERYSAVESLNPROPS, menunjukkan bahwa informasi sedang dipertahankan untuk solusi. Jika nilainya tidak null, informasi yang dipertahankan adalah untuk proyek tertentu, yang ditentukan oleh penunjuk ke IVsHierarchy antarmuka.
Jika ada informasi yang akan disimpan, antarmuka dipanggil IVsSolutionPersistence dengan penunjuk ke SaveSolutionProps metode . Metode WriteSolutionProps ini kemudian dipanggil oleh lingkungan untuk mengambil pasangan nama-nilai dari IPropertyBag antarmuka dan menulis informasi ke .sln file.
SaveSolutionProps dan WriteSolutionProps objek dipanggil secara rekursif oleh lingkungan untuk mengambil informasi yang akan disimpan dari IPropertyBag antarmuka sampai semua perubahan dimasukkan ke .sln dalam file. Dengan cara ini, Anda dapat memastikan bahwa informasi akan bertahan dengan solusi dan tersedia lain kali solusi dibuka.
Setiap VSPackage yang dimuat dijumlahkan untuk melihat apakah ada yang perlu disimpan ke .sln file. Ini hanya pada waktu pemuatan bahwa kunci registri dikueri. Lingkungan tahu tentang semua paket yang dimuat karena berada dalam memori pada saat solusi disimpan.
Hanya file yang .sln berisi entri di bagian preSolution dan postSolution . Tidak ada bagian serupa dalam file .suo karena solusi membutuhkan informasi ini untuk dimuat dengan benar. File .suo berisi opsi khusus pengguna seperti catatan privat yang tidak dimaksudkan untuk dibagikan atau ditempatkan di bawah kontrol kode sumber.