技术速递|SLNX 支持简介,.NET CLI 中一种更加简化的全新解决方案文件格式

B站影视 欧美电影 2025-03-25 22:42 1

摘要:多年来,解决方案文件已成为 .NET 和 Visual Studio 体验的一部分,并且它们始终具有相同的自定义格式。最近,Visual Studio 解决方案团队已开始预览一种新的基于 XML 的解决方案文件格式,称为 slnX。从 .NET SDK 9.0

M

作者:Chet Husk

排版:Alan Wang

多年来,解决方案文件已成为 .NET 和 Visual Studio 体验的一部分,并且它们始终具有相同的自定义格式。最近,Visual Studio 解决方案团队已开始预览一种新的基于 XML 的解决方案文件格式,称为 slnX。从 .NET SDK 9.0.200 开始,dotnetCLI 支持使用与现有解决方案文件相同的方式构建和交互这些文件。在本文的其余部分,我们将展示用户如何能够迁移到新格式,探索dotnetCLI 对该格式的新支持,并讨论该格式走向正式发布的下一步计划。

Visual Studio 解决方案团队已开始预览一种新的基于 XML 的解决方案文件格式

入门

在 SDK 9.0.200 之前,创建 SLNX 文件的唯一方式是通过 Visual Studio 设置。勾选 环境 > 预览功能 > 使用解决方案文件持久性模型设置后,用户可以将现有的.sln文件另存为新的.slnx格式。

SDK 9.0.200 提供了一个命令来执行相同的迁移操作:dotnet sln migrate

让我们从一个非常简单的解决方案和项目设置开始,看看迁移的具体步骤。首先,我们创建一个新的解决方案:

PS C:\Users\chethusk\Code\example> dotnet new slnThe template "Solution File" was created successfully.PS C:\Users\chethusk\Code\example> cat .\example.slnMicrosoft Visual Studio Solution File, Format Version 12.00# Visual Studio Version 17VisualStudioVersion = 17.0.31903.59MinimumVisualStudioVersion = 10.0.40219.1Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSectionEndGlobal

现在,我们将创建一个项目并将其添加到解决方案中:

PS C:\Users\chethusk\Code\example> dotnet new console -n my-appThe template "Console App" was created successfully.Processing post-creation actions...Restoring C:\Users\chethusk\Code\example\my-app\my-app.csproj:Restore succeeded.PS C:\Users\chethusk\Code\example> dotnet sln add .\my-app\Project `my-app\my-app.csproj` added to the solution.Microsoft Visual Studio Solution File, Format Version 12.00# Visual Studio Version 17VisualStudioVersion = 17.0.31903.59MinimumVisualStudioVersion = 10.0.40219.1Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "my-app", "my-app\my-app.csproj", "{845B7716-6F03-4D02-8E86-79F95485B5D7}"EndProjectGlobal GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU Release|x64 = Release|x64 Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {845B7716-6F03-4D02-8E86-79F95485B5D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {845B7716-6F03-4D02-8E86-79F95485B5D7}.Debug|Any CPU.Build.0 = Debug|Any CPU {845B7716-6F03-4D02-8E86-79F95485B5D7}.Debug|x64.ActiveCfg = Debug|Any CPU {845B7716-6F03-4D02-8E86-79F95485B5D7}.Debug|x64.Build.0 = Debug|Any CPU {845B7716-6F03-4D02-8E86-79F95485B5D7}.Debug|x86.ActiveCfg = Debug|Any CPU {845B7716-6F03-4D02-8E86-79F95485B5D7}.Debug|x86.Build.0 = Debug|Any CPU {845B7716-6F03-4D02-8E86-79F95485B5D7}.Release|Any CPU.ActiveCfg = Release|Any CPU {845B7716-6F03-4D02-8E86-79F95485B5D7}.Release|Any CPU.Build.0 = Release|Any CPU {845B7716-6F03-4D02-8E86-79F95485B5D7}.Release|x64.ActiveCfg = Release|Any CPU {845B7716-6F03-4D02-8E86-79F95485B5D7}.Release|x64.Build.0 = Release|Any CPU {845B7716-6F03-4D02-8E86-79F95485B5D7}.Release|x86.ActiveCfg = Release|Any CPU {845B7716-6F03-4D02-8E86-79F95485B5D7}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSectionEndGlobal

现在,让我们将解决方案转换为新格式:

PS C:\Users\chethusk\Code\example> dotnet sln migrate.slnx file C:\Users\chethusk\Code\example\example.slnx generated.PS C:\Users\chethusk\Code\example> cat .\example.slnx

新格式基于 XML,比旧格式简洁得多——但包含所有相同的数据!新格式中缺少的数据是格式默认数据的一部分,因此不会丢失任何功能。

之所以能实现这种迁移,是因为 Visual Studio 解决方案团队创建了一个新的开源库,用于解析和处理经典格式和基于 XML 的解决方案文件——该库名为 Microsoft.VisualStudio.SolutionPersistence。

Microsoft.VisualStudio.SolutionPersistence

使用 CLI 管理项目

除了迁移解决方案文件,您还可以使用 CLI 执行更多操作。正如您所期望的那样,您可以像构建旧解决方案一样构建新解决方案:

PS C:\Users\chethusk\Code\example> dotnet build .\example.slnxRestore complete (0.6s) my-app succeeded (4.3s) → my-app\bin\Debug\net9.0\my-app.dllBuild succeeded in 5.3s

注意:

上面我们明确指定了 .slnx文件,因为如果在同时包含.sln.slnx文件的目录中运行dotnet build或其他需要构建的命令,会导致错误——系统无法确定应该构建哪个文件!

所有您期望的 dotnet CLI 交互方式同样适用于新格式。我们可以添加项目:

PS C:\Users\chethusk\Code\example> dotnet new classlib -n my-libThe template "Class Library" was created successfully.Processing post-creation actions...Restoring C:\Users\chethusk\Code\example\my-lib\my-lib.csproj:Restore succeeded.PS C:\Users\chethusk\Code\example> dotnet sln .\example.slnx add my-libProject `my-lib\my-lib.csproj` added to the solution.PS C:\Users\chethusk\Code\example> cat .\example.slnx

我们可以列出解决方案中的项目:

PS C:\Users\chethusk\Code\example> dotnet sln .\example.slnx listProject(s)my-app\my-app.csprojmy-lib\my-lib.csproj

最后我们可以移除解决方案中的项目:

PS C:\Users\chethusk\Code\example> dotnet sln .\example.slnx remove .\my-lib\Project `my-lib\my-lib.csproj` removed from the solution.PS C:\Users\chethusk\Code\example> cat .\example.slnx

提示

不过,有两个命令在 9.0.200 版本中无法使用——dotnet nuget whydotnet list package。它们将在3月发布的 9.0.201 版本中开始支持。

.NET IDE 和工具对 SNLX 的支持

如上所述,dotnetCLI 已广泛支持新的 SLNX 文件格式,但生态系统中的许多工具目前仅提供部分支持,甚至尚未支持该格式。因此,在决定是否迁移到 SLNX 文件时,您需要考虑这些工具的兼容性。

以下是一些当前对 SLNX 格式支持程度不同的工具示例:

Visual Studio

虽然 IDE 在加载时会读取 SLNX 文件,但目前除非启用了 SLNX 持久性设置,否则它不会加载 SLNX 文件。这意味着,如果您的团队成员未开启该设置,他们将无法打开 SLNX 文件。

此外,目前双击 SLNX 文件不会像 .sln 文件那样自动打开 Visual Studio 实例。

C# DevKit

C# DevKit 可以支持 SLNX 文件,但为了做到这一点,您必须在配置文件中设置 dotnet.defaultSolution属性,将其值指定为 slnx 文件的路径:

{ "dotnet.defaultSolution": "example.slnx"}

slngen

slngen 工具是一个命令行实用程序,用于为指定项目生成解决方案文件,以帮助那些不使用解决方案文件的代码库更好地与 Visual Studio 兼容。目前,该工具尚未更新以支持 SLNX,您可以在 microsoft/slngen#643 跟踪其支持状态。

slngen

microsoft/slngen#643

JetBrains Rider

Rider 已初步支持 SLNX 格式,您可以在 RIDER-110777 跟踪其支持详情。

反馈与正式发布之路

尽管 Visual Studio 和 dotnetCLI 已经提供了端到端的支持,但 SLNX 格式本身仍处于预览阶段。我们认为它在可用性方面对许多 .NET 开发者来说是一次重要的进步,但更希望听到您们在团队中试用后的反馈。请尝试在 Visual Studio 和dotnetCLI 中进行迁移,确保它在 CI/CD 流水线和本地构建中按预期运行,并通过以下方式向团队分享您的使用体验:

CLI 相关体验:在 dotnet/sdk 仓库提交新问题或参与讨论。

Visual Studio 相关体验:在 Visual Studio 开发者社区提交新工单。

解决方案解析库的功能请求:在 microsoft/vs-solutionpersistence 仓库提交新问题。

随着我们根据反馈不断改进并优化核心用户体验,我们将逐步推进 SLNX 格式,最终使其成为 Visual Studio 和 dotnetCLI 的默认格式。

总结

SLNX 文件是解决方案文件格式的一个令人激动的新变化,我们认为它将使团队在协作和理解项目方面变得更加轻松。dotnetCLI 中的新功能让开发者可以在使用新格式时享受完整的内循环和 CI 体验。因此,我们希望 .NET 开发者阅读更新后的文档,尝试新特性,并向我们提供反馈!

更新后的文档

新浪微博|微软中国MSDN

来源:opendotnet

相关推荐