Although the csproj file evolved and simplified a lot over time, the Visual Studio solution file (.sln) remained an ugly file format full of magic GUIDs. With the latest .NET 9 SDK(9.0.200), we finally got an alternative; a new XML-based solution file(.slnx) got introduced in preview.
So say goodbye to this ugly sln file:
Microsoft Visual Studio Solution File, Format Version 12.00 | |
# Visual Studio Version 17 | |
VisualStudioVersion = 17.13.35825.156 | |
MinimumVisualStudioVersion = 10.0.40219.1 | |
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestProject1", "..\TestProject1\TestProject1.csproj", "{0CA151AB-72D3-47B3-902B-2008A79D3923}" | |
EndProject | |
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AICalculator", "AICalculator\AICalculator.csproj", "{86549BF8-C76C-C1FA-8562-3CCB90DB7837}" | |
EndProject | |
Global | |
GlobalSection(SolutionConfigurationPlatforms) = preSolution | |
Debug|Any CPU = Debug|Any CPU | |
Release|Any CPU = Release|Any CPU | |
Test|Any CPU = Test|Any CPU | |
EndGlobalSection | |
GlobalSection(ProjectConfigurationPlatforms) = postSolution | |
{0CA151AB-72D3-47B3-902B-2008A79D3923}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |
{0CA151AB-72D3-47B3-902B-2008A79D3923}.Debug|Any CPU.Build.0 = Debug|Any CPU | |
{0CA151AB-72D3-47B3-902B-2008A79D3923}.Release|Any CPU.ActiveCfg = Release|Any CPU | |
{0CA151AB-72D3-47B3-902B-2008A79D3923}.Release|Any CPU.Build.0 = Release|Any CPU | |
{0CA151AB-72D3-47B3-902B-2008A79D3923}.Test|Any CPU.ActiveCfg = Test|Any CPU | |
{0CA151AB-72D3-47B3-902B-2008A79D3923}.Test|Any CPU.Build.0 = Test|Any CPU | |
{86549BF8-C76C-C1FA-8562-3CCB90DB7837}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |
{86549BF8-C76C-C1FA-8562-3CCB90DB7837}.Debug|Any CPU.Build.0 = Debug|Any CPU | |
{86549BF8-C76C-C1FA-8562-3CCB90DB7837}.Release|Any CPU.ActiveCfg = Release|Any CPU | |
{86549BF8-C76C-C1FA-8562-3CCB90DB7837}.Release|Any CPU.Build.0 = Release|Any CPU | |
{86549BF8-C76C-C1FA-8562-3CCB90DB7837}.Test|Any CPU.ActiveCfg = Test|Any CPU | |
{86549BF8-C76C-C1FA-8562-3CCB90DB7837}.Test|Any CPU.Build.0 = Test|Any CPU | |
EndGlobalSection | |
GlobalSection(SolutionProperties) = preSolution | |
HideSolutionNode = FALSE | |
EndGlobalSection | |
GlobalSection(ExtensibilityGlobals) = postSolution | |
SolutionGuid = {C733AAA2-34BC-4EBA-8FC6-7E404EB05D41} | |
EndGlobalSection | |
EndGlobal |
And meet his better looking slnx brother instead:
<Solution> | |
<Configurations> | |
<BuildType Name="Debug" /> | |
<BuildType Name="Release" /> | |
<BuildType Name="Test" /> | |
</Configurations> | |
<Project Path="../TestProject1/TestProject1.csproj" /> | |
<Project Path="AICalculator/AICalculator.csproj" /> | |
</Solution> |
To use this feature we first have to enable it:
- Go to Tools -> Options -> Environment -> Preview Features
- Check the checkbox next to Use Solution File Persistence Model
Now we can migrate an existing sln file to slnx using the following command:
dotnet sln migrate AICalculator.sln
.slnx file D:\Projects\Test\AICalculator\AICalculator.slnx generated.
Or create a new Visual Studio solution using the slnx format:
dotnet new sln --format slnx
The template "Solution File" was created successfully.
The new format is not yet recognized by VSCode but it does work in Jetbrains Rider:
Nice!