ソリューション (.sln) ファイル
ソリューションは、Visual Studio でプロジェクトを整理するための構造です。 ソリューションでは、プロジェクトの状態情報が次の 2 つのファイルに保持されます。
.sln
ファイル (テキストベース、共有).suo
ファイル (バイナリ、ユーザー固有のソリューション オプション)
.suo ファイルの詳細については、「ソリューション ユーザー オプション (.suo) ファイル」を参照してください。
ファイル内で.sln
参照されているために VSPackage が読み込まれる場合、環境はファイル内の読み取りを.sln
呼び出しますReadSolutionProps。
この .sln
ファイルには、永続化されたデータの名前と値のパラメーターを検索して読み込む際に環境が使用するテキスト ベースの情報が含まれており、それが参照するプロジェクト VSPackage が含まれています。 ユーザーがソリューションを開くと、環境は、ソリューション、ソリューション内の.sln
プロジェクト、およびpostSolution
ソリューションにアタッチされている永続化された情報を読み込むファイル内の情報を循環preSolution
Project
します。
各プロジェクトのファイルには、そのプロジェクトの項目を階層に設定するために環境によって読み取られる追加情報が含まれています。 階層データの永続化は、プロジェクトによって制御されます。 通常、データはファイルに .sln
格納されませんが、ファイルにプロジェクト情報を .sln
意図的に書き込む場合があります。 永続化の詳細については、「プロジェクトの永続化」および「プロジェクト項目のオープンと保存」を参照してください。
ファイル ヘッダー
ファイルの .sln
ヘッダーは次のようになります。
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
定義
Microsoft Visual Studio Solution File, Format Version 12.00
ファイル形式のバージョンを定義する標準ヘッダー。
# Visual Studio Version 16
このソリューション ファイルを (最後に) 保存した Visual Studio のメジャー バージョン。 この情報は、ソリューション アイコンのバージョン番号を制御します。
VisualStudioVersion = 16.0.28701.123
このソリューション ファイルを (最後に) 保存した Visual Studio のフル バージョン。 ソリューション ファイルが、同じメジャー バージョンの新しいバージョンの Visual Studio によって保存されている場合。 この値は、ファイル内のチャーンを減らすように更新されません。
MinimumVisualStudioVersion = 10.0.40219.1
このソリューション ファイルを開くことができる Visual Studio の最小 (最も古い) バージョン。
Microsoft Visual Studio Solution File, Format Version 12.00
ファイル形式のバージョンを定義する標準ヘッダー。
# Visual Studio Version 17
このソリューション ファイルを (最後に) 保存した Visual Studio のメジャー バージョン。 この情報は、ソリューション アイコンのバージョン番号を制御します。
VisualStudioVersion = 17.2.32505.173
このソリューション ファイルを (最後に) 保存した Visual Studio のフル バージョン。 ソリューション ファイルが、同じメジャー バージョンの新しいバージョンの Visual Studio によって保存されている場合。 この値は、ファイル内のチャーンを減らすように更新されません。
MinimumVisualStudioVersion = 10.0.40219.1
このソリューション ファイルを開くことができる Visual Studio の最小 (最も古い) バージョン。
ファイルの本文
ファイルの本文は、 .sln
次のようにラベル付けされた GlobalSection
複数のセクションで構成されます。
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
ソリューションを読み込むには、環境によって次の一連のタスクが実行されます。
環境は、ファイルのグローバル セクションを
.sln
読み取り、マークpreSolution
されたすべてのセクションを処理します。 このサンプル ファイルには、次のようなステートメントが 1 つあります。GlobalSection(SolutionConfiguration) = preSolution ConfigName.0 = Debug ConfigName.1 = Release
環境は、
GlobalSection('name')
タグを読み取ると、レジストリを使用して名前を VSPackage にマップします。 キー名は、レジストリの下[HKLM\\<Application ID Registry Root\>\SolutionPersistence\AggregateGUIDs]
に存在する必要があります。 キーの既定値は、エントリを書き込んだ VSPackage のパッケージ GUID (REG_SZ) です。環境は、VSPackage を読み込み、VSPackage に対して
QueryInterface
を呼び出して IVsPersistSolutionProps インターフェイスを取得し、セクションのデータを使用して ReadSolutionProps メソッドを呼び出すことで、VSPackage でデータを格納できるようにします。 環境は、各preSolution
セクションについてこのプロセスを繰り返します。環境は、プロジェクトの永続化ブロックを反復処理します。 この場合、1 つのプロジェクトがあります。
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Project1", "Project1.vbproj", "{8CDD8387-B905-44A8-B5D5-07BB50E05BEA}" EndProject
このステートメントには、一意のプロジェクト GUID とプロジェクト タイプの GUID が含まれています。 この情報は、ソリューションに属するプロジェクトファイル、および各プロジェクトに必要な VSPackage を検索するために、環境によって使用されます。 プロジェクトに関連する特定の VSPackage を読み込むためにプロジェクト GUID が IVsProjectFactory に渡され、その後、プロジェクトが VSPackage によって読み込まれます。 この例では、このプロジェクトのために読み込まれる VSPackage は Visual Basic です。
各プロジェクトは、必要に応じてソリューション内の他のプロジェクトからアクセス可能になるように、一意のプロジェクト インスタンス ID を永続化することができます。 ソリューションとプロジェクトがソース コード管理下にある場合、プロジェクトへのパスはソリューションのパスに対する相対パスであることが理想的です。 ソリューションが最初に読み込まれると、プロジェクト ファイルをユーザーのコンピューターに置くことができません。 ソリューション ファイルを基準にしてサーバーに保存されているプロジェクト ファイルを用意することで、プロジェクト ファイルを見つけてユーザーのコンピューターにコピーする方が簡単になります。 その後、プロジェクトに必要な残りのファイルがコピーされて読み込まれます。
ファイルのプロジェクト セクション
.sln
に含まれる情報に基づいて、環境は各プロジェクト ファイルを読み込みます。 その後、プロジェクト自体によって、プロジェクト階層の設定および入れ子になったプロジェクトの読み込みが行われます。ファイルのすべてのセクションが
.sln
処理されると、ソリューションはソリューション エクスプローラーに表示され、ユーザーが変更する準備が整います。
VSPackage を実装するソリューション内のプロジェクトが読み込みに失敗した場合、メソッドが呼び出され、 OnProjectLoadFailure ソリューション内のすべてのプロジェクトは、読み込み中に行われた変更を無視します。 解析エラーの場合、可能な限り多くの情報がソリューション ファイルと共に保持されます。 ソリューションが破損していることをユーザーに警告するダイアログ ボックスが表示されます。
ソリューションを保存または閉じると、 QuerySaveSolutionProps メソッドが呼び出されます。 階層に渡され、ファイルに入力する必要があるソリューションに変更が加えられている .sln
かどうかを確認します。 QuerySaveSolutionProps
に VSQUERYSAVESLNPROPS で null 値が渡された場合は、 ソリューションの情報が永続化されることを示します。 値が null でない場合、永続化される情報は、インターフェイスへのポインターによって決定される特定のプロジェクトに対して IVsHierarchy 行われます。
保存する情報がある場合は、メソッドへのポインターを IVsSolutionPersistence 使用してインターフェイスが SaveSolutionProps 呼び出されます。 WriteSolutionPropsこのメソッドは、インターフェイスからIPropertyBag
名前と値のペアを取得し、ファイルに情報を書き込む.sln
環境によって呼び出されます。
SaveSolutionProps
および WriteSolutionProps
オブジェクトは、すべての変更がファイルに入力されるまで、インターフェイスから保存される情報を IPropertyBag
取得するために、環境によって再帰的に .sln
呼び出されます。 この方法では、情報がソリューションと共に永続化され、次にソリューションを開いた時点で使用できることを確認できます。
読み込まれたすべての VSPackage が列挙され、ファイルに保存 .sln
するものがあるかどうかを確認します。 レジストリ キーが照会されるのは読み込み時のみです。 環境では、読み込まれたすべてのパッケージが認識されています。これらは、ソリューションが保存されるときにメモリ内にあるためです。
ファイルにのみ.sln
、セクション内のエントリがpreSolution
postSolution
含まれています。 この情報はソリューションの正しい読み込みに必要なので、.suo ファイルには類似のセクションはありません。 ファイル .suo
には、共有またはソース コード管理下に配置することを意図していないプライベート ノートなどのユーザー固有のオプションが含まれています。