Aracılığıyla paylaş


Çözüm (.sln) dosyası

Çözüm, Visual Studio'da projeleri düzenlemeye yönelik bir yapıdır. Çözüm, projeler için durum bilgilerini iki dosyada tutar:

  • .sln dosya (metin tabanlı, paylaşılan)

  • .suo dosya (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 .sln için çağırırReadSolutionProps.

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 postSolution çözüme eklenen kalıcı bilgileri yüklemek için dosyadaki .sln , Projectve bilgileri arasında preSolutiondö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 16
VisualStudioVersion = 16.0.28701.123
MinimumVisualStudioVersion = 10.0.40219.1
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 16
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 = 16.0.28701.123
Çö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ü.

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:

  1. Ortam, dosyanın Genel bölümünü .sln okur ve işaretli preSolutiontüm bölümleri işler. Bu örnek dosyada böyle bir deyim vardır:

    GlobalSection(SolutionConfiguration) = preSolution
         ConfigName.0 = Debug
         ConfigName.1 = Release
    

    Ortam 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).

  2. Ortam VSPackage'ı yükler, arabirim için VSPackage'ı çağırır QueryInterface ve VSPackage'ın verileri depolaması için IVsPersistSolutionProps bölümündeki verilerle yöntemini çağırır ReadSolutionProps . Ortam bu işlemi her preSolution bölüm için yineler.

  3. 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}"
    EndProject
    

    Bu 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.

  4. Dosyanın proje bölümünde .sln yer 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.

  5. Dosyanın tüm bölümleri işlendikten .sln sonra çözüm Çözüm Gezgini 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 VSQUERYSAVESLNPROPSöğesine geçirilen QuerySaveSolutionProps 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 .sln postSolution bölümlerinde girdiler preSolution 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.