🧩

.NETの新たなソリューションファイル形式(.slnx)

2025/03/21に公開
1

先日、.NET CLIが.slnx形式に対応したという記事が公式から出されました。

https://devblogs.microsoft.com/dotnet/introducing-slnx-support-dotnet-cli/

未だプレビュー段階ではありますが、今後slnxはslnに代わる標準的なソリューションファイル形式になっていく予定です。この記事では改めてslnとは何か、そして今後主流になるとされる新たなslnx形式についてを書いていきます。

そもそもslnとは?

https://learn.microsoft.com/en-us/visualstudio/extensibility/internals/solution-dot-sln-file?view=vs-2022

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が勝手に生成されてしまう場合はautomaticallyCreateSolutionInWorkspacefalseにしておくと良いでしょう。

{
    "dotnet.defaultSolution": "example.slnx",
    "dotnet.automaticallyCreateSolutionInWorkspace": false
}

まとめ

slnファイルの無駄な複雑さに悩まされることが多々あったので、ようやくまともな形式になってくれた...!という感じです。CLI対応でほぼ支障なく運用できるようになったので、安心してslnxに移行していけそうです。

1

Discussion