.NET CLI 对 SLNX 的支持

B站影视 欧美电影 2025-03-17 16:30 1

摘要:解决方案文件多年来一直是 .NET 和 Visual Studio 体验的一部分,并且一直采用相同的自定义格式。最近,Visual Studio 解决方案团队开始预览一种新的基于 XML 的解决方案文件格式,称为 SLNX。从 .NET SDK 9.0.200

在 .NET CLI 中使用对 slnX 的支持,一种全新的、更简单的解决方案文件格式

解决方案文件多年来一直是 .NET 和 Visual Studio 体验的一部分,并且一直采用相同的自定义格式。最近,Visual Studio 解决方案团队开始预览一种新的基于 XML 的解决方案文件格式,称为 SLNX。从 .NET SDK 9.0.200 开始,dotnet CLI 支持以与现有解决方案文件相同的方式构建和交互这些文件。在本文的其余部分中,我们将展示用户如何迁移到新格式,探索 dotnet CLI 中的新支持,并讨论迈向全面发布格式的下一步。

入门

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

9.0.200 SDK 提供了一个命令来完成相同的迁移:dotnet sln migrate。

让我们从一个非常简单的解决方案和项目设置开始,看看迁移需要什么。首先,我们将创建一个新的解决方案:

PS C:\Users\chethusk\Code\example> dotnet new sln
模板“Solution File”已成功创建。
PS C:\Users\chethusk\Code\example> cat .\example.sln
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

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

PS C:\Users\chethusk\Code\example> dotnet new console -n my-app
模板“Console App”已成功创建。
正在处理创建后的操作...
正在还原 C:\Users\chethusk\Code\example\my-app\my-app.csproj:
还原成功。
PS C:\Users\chethusk\Code\example> dotnet sln add .\my-app\
项目 `my-app\my-app.csproj` 已添加到解决方案。
PS C:\Users\chethusk\Code\example> cat .\example.sln
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "my-app", "my-app\my-app.csproj", "{845B7716-6F03-4D02-8E86-79F95485B5D7}"
EndProject
Global
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
EndGlobalSection
EndGlobal

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

PS C:\Users\chethusk\Code\example> dotnet sln migrate
.slnx 文件 C:\Users\chethusk\Code\example\example.slnx 已生成。
PS C:\Users\chethusk\Code\example> cat .\example.slnx








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

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

从 CLI 管理项目

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

PS C:\Users\chethusk\Code\example> dotnet build .\example.slnx
还原完成 (0.6 秒)
my-app 成功 (4.3 秒) → my-app\bin\Debug\net9.0\my-app.dll
构建成功,耗时 5.3 秒

注意

我们在上面明确指定了.slnx文件,因为在同时包含.sln和.slnx的目录中运行dotnet build或其他需要构建的命令会报错——我们不知道应该构建哪一个!

您期望的所有其他与 dotnet CLI 的交互也都有效。我们可以添加项目:

PS C:\Users\chethusk\Code\example> dotnet new classlib -n my-lib
模板“Class Library”已成功创建。
正在处理创建后的操作...
正在还原 C:\Users\chethusk\Code\example\my-lib\my-lib.csproj:
还原成功。
PS C:\Users\chethusk\Code\example> dotnet sln .\example.slnx add my-lib
项目 `my-lib\my-lib.csproj` 已添加到解决方案。
PS C:\Users\chethusk\Code\example> cat .\example.slnx









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

PS C:\Users\chethusk\Code\example> dotnet sln .\example.slnx list
项目

my-app\my-app.csproj
my-lib\my-lib.csproj

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

PS C:\Users\chethusk\Code\example> dotnet sln .\example.slnx remove .\my-lib\
项目 `my-lib\my-lib.csproj` 已从解决方案中移除。
PS C:\Users\chethusk\Code\example> cat .\example.slnx








提示

在 9.0.200 中有两个命令不起作用——dotnet nuget why和dotnet list package——它们将在 3 月发布的 9.0.201 版本中开始工作。SLNX 在 .NET IDE 和工具中的支持

如上所述,dotnet CLI 对新的 SLNX 文件格式有广泛的支持,但生态系统中仍有许多工具对这种格式的支持程度不一。在选择是否迁移到 SLNX 文件时,您需要考虑这种不同的支持水平。以下是一些对 SLNX 支持程度不同的工具示例:

Visual Studio虽然 IDE 在加载时会读取 SLNX 文件,但目前除非启用了启用 SLNX 持久化的设置,否则不会加载 SLNX 文件。这意味着如果您在一个团队中工作并且用户未切换此设置,他们将完全无法打开 SLNX 文件。此外,双击 SLNX 文件目前不会像.sln文件那样打开 Visual Studio 实例。C# Dev KitC# Dev Kit 可以支持 SLNX 文件,但为此您必须将dotnet.defaultSolution属性设置为 SLNX 文件的路径:{
"dotnet.defaultSolution":"example.slnx"
}
slngen

slngen 工具是一个命令行实用程序,用于为给定项目合成解决方案文件,以帮助那些更喜欢不使用解决方案文件的存储库更好地与 Visual Studio 互操作。此工具尚未更新以支持 SLNX——支持的状态可以在 microsoft/slngen#643 跟踪。

JetBrains Rider

Rider 对 SLNX 格式有初步支持,有关其支持的详细信息可以在 RIDER-110777 跟踪。

反馈与迈向 GA

尽管 Visual Studio 和 dotnet CLI 提供了端到端的支持,但 SLNX 格式本身仍处于预览阶段。我们认为这是许多 .NET 开发人员在可用性方面迈出的一大步,但我们希望在您在团队中尝试时听到您的反馈。请尝试 Visual Studio 和 dotnet CLI 中的迁移路径,确保在 CI/CD 管道和本地构建中一切正常,并通过以下方式向团队分享您的体验:

对于 CLI 体验,请在 dotnet/sdk 仓库报告新问题或讨论。

对于 Visual Studio 体验,请在 Visual Studio 开发者社区 提交新工单。

对于解决方案解析库的功能请求,请在 microsoft/vs-solutionpersistence 仓库报告新问题。

随着我们能够响应您的反馈并巩固核心用户体验,我们离使这成为 Visual Studio 和 dotnet CLI 的默认设置越来越近。

总结

SLNX 文件是对解决方案文件格式的一项激动人心的新变化,我们认为这将使团队更容易协作和理解他们的项目。dotnet CLI 中的新功能允许开发人员使用新格式获得完整的内循环和 CI 体验,因此我们希望 .NET 开发人员阅读更新的文档,尝试新的支持,并向我们提供反馈!

来源:opendotnet

相关推荐