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:
.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
, Project
ve bilgileri arasında preSolution
dö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ş GlobalSection
birkaç 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ü
.sln
okur ve işaretlipreSolution
tü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).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 herpreSolution
bö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}" 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.
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.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.