.NETの新たなソリューションファイル形式(.slnx)
先日、.NET CLIが.slnx
形式に対応したという記事が公式から出されました。
未だプレビュー段階ではありますが、今後slnxはslnに代わる標準的なソリューションファイル形式になっていく予定です。この記事では改めてslnとは何か、そして今後主流になるとされる新たなslnx形式についてを書いていきます。
そもそもslnとは?
sln(ソリューション)は、Visual StudioなどのIDEで複数の.NETプロジェクトを整理するためのファイルです。中身はテキストファイルで、ビルドの設定(Debug/Release)やプラットフォーム、csprojごとのGUIDなどの情報が記載されています。
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.2.32505.173
MinimumVisualStudioVersion = 10.0.40219.1
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Project1", "Project1.csproj", "{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ファイルはVisual Studio、Visual Studio Code、Riderなどを利用している場合はプロジェクト作成時に自動で作成・編集されます。また、dotnet sln
コマンド経由で作成や編集を行うことも可能です。
ただし、上の例を見てもわかる通りslnファイルの形式は複雑で、人の手によって編集されることが想定されていません。そもそも今ではGUIDや構成情報などをslnに保持しておく必要も特にありません。
そのため、このような無駄に複雑な形式を維持するよりも、もっと人間が理解しやすい形式にすべきだろうということで問題視されてきました。
slnxファイル
そこで新たに登場したのがslnx形式です。これは従来のslnの中身をXMLのような形式で記述したもので、以下のような形になります。
<Solution>
<Folder Name="/Project/">
<Project Path="Project/Project1.csproj" />
</Folder>
</Solution>
slnよりも圧倒的に読みやすく、中身も遥かに短くなっています。従来のslnからslnxに移行するには、dotnet sln migrate
コマンドを実行すればOKです。
未だプレビュー段階ではありますが、既に多くのツールがslnxに対応しています。CLIでのサポートも完了したため、ようやく本格的にslnxに移行を始められる段階になったと言えるでしょう。
ただし、VSCode(C# Dev Kit)の場合はdefaultSolution
を明示的に設定する必要があります。また、新たなslnが勝手に生成されてしまう場合はautomaticallyCreateSolutionInWorkspace
をfalse
にしておくと良いでしょう。
{
"dotnet.defaultSolution": "example.slnx",
"dotnet.automaticallyCreateSolutionInWorkspace": false
}
まとめ
slnファイルの無駄な複雑さに悩まされることが多々あったので、ようやくまともな形式になってくれた...!という感じです。CLI対応でほぼ支障なく運用できるようになったので、安心してslnxに移行していけそうです。
Discussion