惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Webroot Blog
Webroot Blog
U
Unit 42
A
About on SuperTechFans
宝玉的分享
宝玉的分享
月光博客
月光博客
C
CERT Recently Published Vulnerability Notes
P
Privacy International News Feed
Microsoft Security Blog
Microsoft Security Blog
G
Google Developers Blog
P
Privacy & Cybersecurity Law Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
S
Securelist
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Spread Privacy
Spread Privacy
L
Lohrmann on Cybersecurity
Apple Machine Learning Research
Apple Machine Learning Research
K
Kaspersky official blog
Hugging Face - Blog
Hugging Face - Blog
B
Blog
I
Intezer
Last Week in AI
Last Week in AI
T
Threat Research - Cisco Blogs
V
V2EX
L
LangChain Blog
AI
AI
G
GRAHAM CLULEY
T
Tor Project blog
人人都是产品经理
人人都是产品经理
D
Docker
WordPress大学
WordPress大学
Google DeepMind News
Google DeepMind News
I
InfoQ
Y
Y Combinator Blog
C
Comments on: Blog
GbyAI
GbyAI
www.infosecurity-magazine.com
www.infosecurity-magazine.com
酷 壳 – CoolShell
酷 壳 – CoolShell
T
Tailwind CSS Blog
aimingoo的专栏
aimingoo的专栏
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
腾讯CDC
N
News and Events Feed by Topic
MyScale Blog
MyScale Blog
H
Help Net Security
Vercel News
Vercel News
T
Tenable Blog
博客园 - 三生石上(FineUI控件)
爱范儿
爱范儿

博客园 - zhaotianff

一文带你搞懂医疗器械设计开发全生命周期 Windows如何清除本机记录的git用户名和密码 HL7协议详解 医疗行业 GDT 数据格式详解 一文带你搞懂C# 异步编程(async/await)底层原理 如何在C#中使用Chromium headless(无头模式)浏览器 不同.NET版本中的WPF新增功能 如何在WPF中使用 Fluent 主题 Windows平台下的各种原生UI框架介绍 C#如何Hook托管函数 WinDbg 用户层调试进阶教程 Windows编程的一些基础理论 推荐一款优秀的Windows经典文件管理器项目-WinFile Windows如何阻止应用程序联网 如何在WPF中捕获窗口外的事件 如何查看Windows进程的启动来源 我的微软MVP申请通过了 WPF MVVM实战系列教程(八、Prism DialogService, 对话框服务) WPF MVVM实战系列教程(七、Prism模块化) WPF 性能优化实战指南 WPF MVVM实战系列教程(六、Prism区域导航) WPF MVVM实战系列教程(五、Prism中的MVVM) WPF MVVM实战系列教程(四、Prism中的依赖注入) 微软 IDE 新纪元:Visual Studio 2026 初体验 Windows 7无法安装VMWare Tools的解决办法 WPF MVVM实战系列教程(三、创建Bootstrapper/启动器) WPF MVVM实战系列教程(二、使用Visual Studio 创建Prism项目) WPF MVVM实战系列教程(一、Prism框架介绍)
Visual Studio 2026新解决方案格式slnx详解
zhaotianff · 2026-02-08 · via 博客园 - zhaotianff

项目解决方案文件(.sln)

.sln格式最初启用于Visual Studio .Net 2003(2002年),距今已经20多个年头。

.sln解决方案是用于在 Visual Studio 中组织项目的结构。

该解决方案维护两个文件中项目的状态信息:

  • .sln 文件(基于文本、共享)

  • .suo 文件 (二进制,特定于用户的解决方案选项)

有关 .suo 文件的详细信息,可以参阅 解决方案用户选项 (.suo) 文件

这里我们创建一个控制台项目,可以在解决方案管理器中看到解决方案文件,如下所示:

image

打开对应的.sln文件,显示内容如下

 1 Microsoft Visual Studio Solution File, Format Version 12.00
 2 # Visual Studio Version 17
 3 VisualStudioVersion = 17.9.34728.123
 4 MinimumVisualStudioVersion = 10.0.40219.1
 5 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleApp10", "ConsoleApp10\ConsoleApp10.csproj", "{01808206-9425-41A9-ACF5-EA680880EC4F}"
 6 EndProject
 7 Global
 8     GlobalSection(SolutionConfigurationPlatforms) = preSolution
 9         Debug|Any CPU = Debug|Any CPU
10         Release|Any CPU = Release|Any CPU
11     EndGlobalSection
12     GlobalSection(ProjectConfigurationPlatforms) = postSolution
13         {01808206-9425-41A9-ACF5-EA680880EC4F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
14         {01808206-9425-41A9-ACF5-EA680880EC4F}.Debug|Any CPU.Build.0 = Debug|Any CPU
15         {01808206-9425-41A9-ACF5-EA680880EC4F}.Release|Any CPU.ActiveCfg = Release|Any CPU
16         {01808206-9425-41A9-ACF5-EA680880EC4F}.Release|Any CPU.Build.0 = Release|Any CPU
17     EndGlobalSection
18     GlobalSection(SolutionProperties) = preSolution
19         HideSolutionNode = FALSE
20     EndGlobalSection
21     GlobalSection(ExtensibilityGlobals) = postSolution
22         SolutionGuid = {7DD1B75F-0BA6-456D-BD8D-4ECC1827FB02}
23     EndGlobalSection
24 EndGlobal

关于.sln格式的详细介绍,可以参考以下链接:

https://learn.microsoft.com/zh-cn/visualstudio/extensibility/internals/solution-dot-sln-file?view=visualstudio

新升级

在前面的文章中,我介绍了Visual Studio 2026的使用体验。

https://www.cnblogs.com/zhaotianff/p/19475271

Visual Studio 2026不仅升级了IDE,也升级了解决方案格式(.sln),取而代之的是.slnx格式

多年来,我们一直使用Visual Studio的解决方案文件(*.SLN)格式,虽然它是项目组织的核心部分,但是手动修改这个文件却并不是那么方便。在维护或是解决git冲突时,这个过程往往比预期的更麻烦。

所以官方升级了这个文件,使用一种全新的格式来解决这些痛点。

我们使用Visual Studio 2026创建一个控制台工程,就可以看到解决方案已经默认使用了.slnx格式

image

可以通过设置来更改默认的解决方案格式

image

打开这个.slnx格式文件,内容如下

1 <Solution>
2   <Project Path="ConsoleApp4/ConsoleApp4.csproj" />
3 </Solution>

可以看到它是基于XML格式的,初看确实是非常的简洁。

如何从.sln升级到.slnx

这里以我前面MVVM示例工程代码进行演示

https://github.com/zhaotianff/WPF-MVVM-Beginner

升级前

 1 Microsoft Visual Studio Solution File, Format Version 12.00
 2 # Visual Studio Version 18
 3 VisualStudioVersion = 18.1.11312.151 d18.0
 4 MinimumVisualStudioVersion = 10.0.40219.1
 5 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "INotifyPropertyChangedDemo", "INotifyPropertyChangedDemo\INotifyPropertyChangedDemo.csproj", "{2F087008-F115-4436-9817-AE5BEAEA5A85}"
 6 EndProject
 7 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FirstViewModel", "FirstViewModel\FirstViewModel.csproj", "{15768A49-BB13-4171-B091-072213ACE803}"
 8 EndProject
 9 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NormalCollectionDemo", "NormalCollectionDemo\NormalCollectionDemo.csproj", "{1AFCADB0-2928-459C-A31F-74F78D295B22}"
10 EndProject
11 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ObservableCollectionDemo", "ObservableCollectionDemo\ObservableCollectionDemo.csproj", "{82952377-653E-46D0-8CE8-8EB45FE74A8B}"
12 EndProject
13 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MethodsToSetViewModel", "MethodsToSetViewModel\MethodsToSetViewModel.csproj", "{9DBAFE24-58EE-496E-BD30-E67A7B90462A}"
14 EndProject
15 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UpdateCollectionItemDemo", "UpdateCollectionItemDemo\UpdateCollectionItemDemo.csproj", "{9511B951-440C-4FD9-8DA7-49618C3680F6}"
16 EndProject
17 Global
18     GlobalSection(SolutionConfigurationPlatforms) = preSolution
19         Debug|Any CPU = Debug|Any CPU
20         Release|Any CPU = Release|Any CPU
21     EndGlobalSection
22     GlobalSection(ProjectConfigurationPlatforms) = postSolution
23         {2F087008-F115-4436-9817-AE5BEAEA5A85}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
24         {2F087008-F115-4436-9817-AE5BEAEA5A85}.Debug|Any CPU.Build.0 = Debug|Any CPU
25         {2F087008-F115-4436-9817-AE5BEAEA5A85}.Release|Any CPU.ActiveCfg = Release|Any CPU
26         {2F087008-F115-4436-9817-AE5BEAEA5A85}.Release|Any CPU.Build.0 = Release|Any CPU
27         {15768A49-BB13-4171-B091-072213ACE803}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
28         {15768A49-BB13-4171-B091-072213ACE803}.Debug|Any CPU.Build.0 = Debug|Any CPU
29         {15768A49-BB13-4171-B091-072213ACE803}.Release|Any CPU.ActiveCfg = Release|Any CPU
30         {15768A49-BB13-4171-B091-072213ACE803}.Release|Any CPU.Build.0 = Release|Any CPU
31         {1AFCADB0-2928-459C-A31F-74F78D295B22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
32         {1AFCADB0-2928-459C-A31F-74F78D295B22}.Debug|Any CPU.Build.0 = Debug|Any CPU
33         {1AFCADB0-2928-459C-A31F-74F78D295B22}.Release|Any CPU.ActiveCfg = Release|Any CPU
34         {1AFCADB0-2928-459C-A31F-74F78D295B22}.Release|Any CPU.Build.0 = Release|Any CPU
35         {82952377-653E-46D0-8CE8-8EB45FE74A8B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
36         {82952377-653E-46D0-8CE8-8EB45FE74A8B}.Debug|Any CPU.Build.0 = Debug|Any CPU
37         {82952377-653E-46D0-8CE8-8EB45FE74A8B}.Release|Any CPU.ActiveCfg = Release|Any CPU
38         {82952377-653E-46D0-8CE8-8EB45FE74A8B}.Release|Any CPU.Build.0 = Release|Any CPU
39         {9DBAFE24-58EE-496E-BD30-E67A7B90462A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
40         {9DBAFE24-58EE-496E-BD30-E67A7B90462A}.Debug|Any CPU.Build.0 = Debug|Any CPU
41         {9DBAFE24-58EE-496E-BD30-E67A7B90462A}.Release|Any CPU.ActiveCfg = Release|Any CPU
42         {9DBAFE24-58EE-496E-BD30-E67A7B90462A}.Release|Any CPU.Build.0 = Release|Any CPU
43         {9511B951-440C-4FD9-8DA7-49618C3680F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
44         {9511B951-440C-4FD9-8DA7-49618C3680F6}.Debug|Any CPU.Build.0 = Debug|Any CPU
45         {9511B951-440C-4FD9-8DA7-49618C3680F6}.Release|Any CPU.ActiveCfg = Release|Any CPU
46         {9511B951-440C-4FD9-8DA7-49618C3680F6}.Release|Any CPU.Build.0 = Release|Any CPU
47     EndGlobalSection
48     GlobalSection(SolutionProperties) = preSolution
49         HideSolutionNode = FALSE
50     EndGlobalSection
51     GlobalSection(ExtensibilityGlobals) = postSolution
52         SolutionGuid = {81121DCC-21A4-4176-88C6-FBDFDFB9A1F1}
53     EndGlobalSection
54 EndGlobal

执行升级操作

1、通过Visual Studio 2026来执行升级

image

2、使用 .NET 命令行工具 (.NET 项目)执行升级

1 dotnet SLN <YourSolutionFile.SLN> migrate

执行后,就会生成.slnx解决方案文件

升级后

1 <Solution>
2   <Project Path="FirstViewModel/FirstViewModel.csproj" />
3   <Project Path="INotifyPropertyChangedDemo/INotifyPropertyChangedDemo.csproj" />
4   <Project Path="MethodsToSetViewModel/MethodsToSetViewModel.csproj" />
5   <Project Path="NormalCollectionDemo/NormalCollectionDemo.csproj" />
6   <Project Path="ObservableCollectionDemo/ObservableCollectionDemo.csproj" />
7   <Project Path="UpdateCollectionItemDemo/UpdateCollectionItemDemo.csproj" />
8 </Solution>

 注意:根据官方的建议,尽量不要共存.sln文件和.slnx文件。在生成.slnx文件后,删除原来的.sln文件,并使用.slnx重新打开解决方案

.slnx的核心特性

Visual Studio 官方团队对新的解决方案文件格式进行了多项改进,以提升Visual Studio的使用体验。

这些改进包括:结构更具可读性和可编辑性、采用XML格式,以及保留空白和注释以实现更好的组织性。

新格式设计简洁,旨在优化性能,加快加载速度,并减少版本控制中的合并冲突。

此外,它还确保与旧版Visual Studio的兼容性,并遵循特定的MSBuild约定,从而更顺畅地与其他工具集成。

以下是这些增强的详细介绍:

易读且可编辑

新的解决方案文件格式在设计时便考虑到了清晰性,使开发人员能够轻松阅读和修改项目配置。这大大减少了因手动编辑复杂文件而产生的混淆和错误。

标准化XML格式

采用XML作为解决方案的文件结构。XML被广泛理解,它提供了灵活性和标准化,从而更易于使用。

空白和注释保留

保存解决方案文件时,会保留其中的空白和注释,确保文件格式保持不变,并有助于维护文件的有序性。

占用空间极小

新格式采用了合理的默认设置,使解决方案文件保持最小化,并优化了性能。这有助于高效利用资源,即使对于大型解决方案也是如此。

减少合并冲突

通过简化文件结构,降低了版本控制系统中出现合并冲突的可能性。这意味着与团队成员协作时,会减少令人头疼的问题,并且更易于管理更改。

与旧版Visual Studio的兼容性

Visual Studio团队已确保与Visual Studio Dev 17.14的兼容性,从而实现了新旧文件格式之间的平滑过渡,而不会中断原来的工作流程。

与MSBuild保持一致

新格式与特定的MSBuild约定保持一致,从而增强了其与其他工具和平台的集成,确保了更顺畅的互操作性。

参考资料:

https://learn.microsoft.com/zh-cn/dotnet/core/compatibility/sdk/10.0/dotnet-new-sln-slnx-default

https://devblogs.microsoft.com/visualstudio/new-simpler-solution-file-format/

https://learn.microsoft.com/zh-cn/visualstudio/extensibility/internals/solution-dot-sln-file?view=visualstudio