Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Çözüm, Visual Studio'da projeleri düzenlemeye yönelik bir yapıdır. Çözüm, projeler için durum bilgilerini iki dosyada tutar:
.slndosya (metin tabanlı, paylaşılan).suodosya (ikili, kullanıcıya özgü çözüm seçenekleri)
.suo dosyaları hakkında daha fazla bilgi için bkz . Çözüm Kullanıcı Seçenekleri (.suo) Dosyası.
VSPackage'ınız dosyada .sln başvurulduğu için yüklenirse, ortam dosyayı okumak ReadSolutionProps için çağırır.sln.
Dosya, .sln ortamın kalıcı veriler ve başvuruda bulunduğu VSPackage projesi için ad değeri parametrelerini bulmak ve yüklemek için kullandığı metin tabanlı bilgileri içerir. Bir kullanıcı bir çözümü açtığında ortam, çözümü, çözümün içindeki projeleri ve preSolution çözüme eklenen kalıcı bilgileri yüklemek için dosyadaki Project , postSolutionve bilgileri arasında .slndöngü oluşturur.
Her projenin dosyası, hiyerarşiyi o projenin öğeleriyle doldurmak için ortam tarafından okunan ek bilgiler içerir. Hiyerarşi veri kalıcılığı proje tarafından denetlendi. Veriler normalde dosyada .sln depolanmaz, ancak bunu yapmayı seçerseniz dosyaya .sln kasıtlı olarak proje bilgileri yazabilirsiniz. Kalıcılık hakkında daha fazla bilgi için bkz. Proje Kalıcılığı ve Proje Öğelerini Açma ve Kaydetme.
Dosya üst bilgisi
Bir .sln dosyanın üst bilgisi şöyle görünür:
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.2.32505.173
MinimumVisualStudioVersion = 10.0.40219.1
Tanımlar
Microsoft Visual Studio Solution File, Format Version 12.00
Dosya biçimi sürümünü tanımlayan standart üst bilgi.
# Visual Studio Version 17
Bu çözüm dosyasını (en son) kaydeden Visual Studio'nun ana sürümü. Bu bilgiler, çözüm simgesindeki sürüm numarasını denetler.
VisualStudioVersion = 17.2.32505.173
Çözüm dosyasını (en son) kaydeden Visual Studio'nun tam sürümü. Çözüm dosyası aynı ana sürüme sahip daha yeni bir Visual Studio sürümü tarafından kaydedilirse. Bu değer, dosyadaki değişim oranını azaltacak şekilde güncelleştirilmez.
MinimumVisualStudioVersion = 10.0.40219.1
Visual Studio'nun bu çözüm dosyasını açabilen en düşük (en eski) sürümü.
Dosya gövdesi
Dosyanın .sln gövdesi şu şekilde etiketlenmiş GlobalSectionbirkaç bölümden oluşur:
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
Bir çözümü yüklemek için ortam aşağıdaki görev dizisini yapar:
Ortam, dosyanın Genel bölümünü
.slnokur ve işaretlipreSolutiontüm bölümleri işler. Bu örnek dosyada böyle bir deyim vardır:GlobalSection(SolutionConfiguration) = preSolution ConfigName.0 = Debug ConfigName.1 = ReleaseOrtam etiketi okuduğunda
GlobalSection('name'), kayıt defterini kullanarak adı bir VSPackage ile eşler. Anahtar adı kayıt defterinde altında[HKLM\\<Application ID Registry Root\>\SolutionPersistence\AggregateGUIDs]bulunmalıdır. Anahtarların varsayılan değeri, girişleri yazan VSPackage'ın Paket GUID'leridir (REG_SZ).Ortam VSPackage'ı yükler, arabirim için VSPackage'ı çağırır
QueryInterfaceve VSPackage'ın verileri depolaması için IVsPersistSolutionProps bölümündeki verilerle yöntemini çağırır ReadSolutionProps . Ortam bu işlemi herpreSolutionbölüm için yineler.Ortam, proje kalıcılık blokları aracılığıyla yinelenir. Bu durumda, bir proje vardır.
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Project1", "Project1.vbproj", "{8CDD8387-B905-44A8-B5D5-07BB50E05BEA}" EndProjectBu deyim benzersiz proje GUID'sini ve proje türü GUID'sini içerir. Bu bilgiler ortam tarafından çözüme ait proje dosyasını veya dosyalarını ve her proje için gereken VSPackage'ı bulmak için kullanılır. ProjeYLE ilgili belirli VSPackage'ı yüklemek için proje GUID'sine geçirilir IVsProjectFactory , ardından proje VSPackage tarafından yüklenir. Bu durumda, bu proje için yüklenen VSPackage Visual Basic'tir.
Her proje, çözümdeki diğer projeler tarafından gerektiğinde erişilmesi için benzersiz bir proje örneği kimliğini kalıcı hale gelebilir. İdeal olarak, çözüm ve projeler kaynak kodu denetimi altındaysa, projenin yolu çözümün yoluna göre olmalıdır. Çözüm ilk yüklendiğinde, proje dosyaları kullanıcının makinesinde olamaz. Çözüm dosyasına göre sunucuda depolanan proje dosyasının bulunması ve kullanıcının makinesine kopyalanması daha kolaydır. Ardından proje için gereken dosyaların geri kalanını kopyalayıp yükler.
Dosyanın proje bölümünde
.slnyer alan bilgilere bağlı olarak, ortam her proje dosyasını yükler. Daha sonra proje hiyerarşisini doldurma ve iç içe projeleri yükleme sorumluluğu projenin kendisidir.Dosyanın tüm bölümleri işlendikten
.slnsonra çözüm Çözüm Gezgini'nde görüntülenir ve kullanıcı tarafından değiştirilmeye hazırdır.
Çözümde VSPackage uygulayan herhangi bir proje yüklenemezse, OnProjectLoadFailure yöntem çağrılır ve çözümdeki tüm projeler yükleme sırasında yapmış olabileceği değişiklikleri yoksayar. Ayrıştırma hataları için çözüm dosyalarıyla mümkün olduğunca çok bilgi korunur. Ortam, kullanıcıyı çözümün bozulduğunu belirten bir iletişim kutusu görüntüler.
Çözüm kaydedildiğinde veya kapatıldığında QuerySaveSolutionProps yöntemi çağrılır. Çözümde dosyaya girilmesi gereken değişiklikler yapılıp yapılmadığını görmek için hiyerarşiye .sln geçirilir. içinde QuerySaveSolutionPropsöğesine geçirilen VSQUERYSAVESLNPROPS null değer, çözüm için bilgilerin kalıcı olduğunu gösterir. Değer null değilse, kalıcı bilgiler arabirim işaretçisi tarafından belirlenen belirli bir projeye yöneliktir IVsHierarchy .
Kaydedilecek bilgiler varsa, yöntemine IVsSolutionPersistence bir işaretçi ile arabirim çağrılır SaveSolutionProps . Yöntemi WriteSolutionProps daha sonra ortam tarafından arabirimden IPropertyBag ad-değer çiftlerini almak ve bilgileri dosyaya yazmak için çağrılır .sln .
SaveSolutionProps ve WriteSolutionProps nesneleri, tüm değişiklikler dosyaya girilene kadar arabirimden IPropertyBag kaydedilecek bilgileri almak için ortam tarafından özyinelemeli olarak çağrılır .sln . Bu şekilde, bilgilerin çözümle birlikte kalıcı olmasını ve çözümün bir sonraki açılışında kullanılabilir olmasını sağlayabilirsiniz.
Yüklenen her VSPackage, dosyaya kaydedilecek bir şey olup olmadığını görmek için .sln numaralandırılır. Yalnızca yükleme zamanında kayıt defteri anahtarları sorgulanır. Ortam, çözümün kaydedildiği sırada bellekte olduklarından yüklenen tüm paketleri bilir.
Yalnızca dosya ve .slnpreSolution bölümlerinde girdiler postSolution içerir. Çözümün bu bilgilerin düzgün yüklenmesi gerektiğinden .suo dosyasında benzer bölümler yoktur. Dosya, .suo paylaşılması veya kaynak kodu denetimine yerleştirilmesi amaçlanmayan özel notlar gibi kullanıcıya özgü seçenekler içerir.