大数跨境
0
0

新的解决方案文件格式 slnx 支持来了

新的解决方案文件格式 slnx 支持来了 amazingdotnet
2025-02-15
0
导读:dotnet cli 支持新的解决方案文件格式 slnx 了

dotnet cli 支持新的解决方案文件格式 slnx 了

Intro

前两天微软发布了 .NET 9 SDK 的新版本, 在这个新版本中引入了新的解决方案文件格式 slnx 的支持, 现在可以从 dotnet cli 来创建和维护 slnx 了, 并且支持了从 sln 迁移到 slnx, 目前 VisualStudio 和 Rider 都已经支持了 slnx 文件, dotnet cli 也终于支持了 slnx 文件了

What

slnx 是一个全新的解决方案文件格式, 文件后缀名是 slnx 文件编码是 UTF-8, 相比之前的 sln 解决方案文件大大地简化了, 示例如下,

sln 解决方案文件:


Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.30114.105
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src""src""{93FF0703-CB28-47B0-AB46-86E80B7A53F7}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "dotnet-exec""src\dotnet-exec\dotnet-exec.csproj""{07B7AD92-68A6-4744-9C9D-0874ACC0895C}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests""tests""{0A5C6C6F-D3BD-404F-B515-05B4003C5711}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTest""tests\UnitTest\UnitTest.csproj""{D16F36B2-A5A9-495B-A9C7-CC4F203927E3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IntegrationTest""tests\IntegrationTest\IntegrationTest.csproj""{ED907129-D6CC-46FA-9F40-DA4FEAFA93F2}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ReferenceResolver""src\ReferenceResolver\ReferenceResolver.csproj""{3C8F8722-D0E9-4A1F-9067-299A36A599E7}"
EndProject
Global
 GlobalSection(SolutionProperties) = preSolution
  HideSolutionNode = FALSE
 EndGlobalSection
 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
  {07B7AD92-68A6-4744-9C9D-0874ACC0895C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
  {07B7AD92-68A6-4744-9C9D-0874ACC0895C}.Debug|Any CPU.Build.0 = Debug|Any CPU
  {07B7AD92-68A6-4744-9C9D-0874ACC0895C}.Debug|x64.ActiveCfg = Debug|Any CPU
  {07B7AD92-68A6-4744-9C9D-0874ACC0895C}.Debug|x64.Build.0 = Debug|Any CPU
  {07B7AD92-68A6-4744-9C9D-0874ACC0895C}.Debug|x86.ActiveCfg = Debug|Any CPU
  {07B7AD92-68A6-4744-9C9D-0874ACC0895C}.Debug|x86.Build.0 = Debug|Any CPU
  {07B7AD92-68A6-4744-9C9D-0874ACC0895C}.Release|Any CPU.ActiveCfg = Release|Any CPU
  {07B7AD92-68A6-4744-9C9D-0874ACC0895C}.Release|Any CPU.Build.0 = Release|Any CPU
  {07B7AD92-68A6-4744-9C9D-0874ACC0895C}.Release|x64.ActiveCfg = Release|Any CPU
  {07B7AD92-68A6-4744-9C9D-0874ACC0895C}.Release|x64.Build.0 = Release|Any CPU
  {07B7AD92-68A6-4744-9C9D-0874ACC0895C}.Release|x86.ActiveCfg = Release|Any CPU
  {07B7AD92-68A6-4744-9C9D-0874ACC0895C}.Release|x86.Build.0 = Release|Any CPU
  {D16F36B2-A5A9-495B-A9C7-CC4F203927E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
  {D16F36B2-A5A9-495B-A9C7-CC4F203927E3}.Debug|Any CPU.Build.0 = Debug|Any CPU
  {D16F36B2-A5A9-495B-A9C7-CC4F203927E3}.Debug|x64.ActiveCfg = Debug|Any CPU
  {D16F36B2-A5A9-495B-A9C7-CC4F203927E3}.Debug|x64.Build.0 = Debug|Any CPU
  {D16F36B2-A5A9-495B-A9C7-CC4F203927E3}.Debug|x86.ActiveCfg = Debug|Any CPU
  {D16F36B2-A5A9-495B-A9C7-CC4F203927E3}.Debug|x86.Build.0 = Debug|Any CPU
  {D16F36B2-A5A9-495B-A9C7-CC4F203927E3}.Release|Any CPU.ActiveCfg = Release|Any CPU
  {D16F36B2-A5A9-495B-A9C7-CC4F203927E3}.Release|Any CPU.Build.0 = Release|Any CPU
  {D16F36B2-A5A9-495B-A9C7-CC4F203927E3}.Release|x64.ActiveCfg = Release|Any CPU
  {D16F36B2-A5A9-495B-A9C7-CC4F203927E3}.Release|x64.Build.0 = Release|Any CPU
  {D16F36B2-A5A9-495B-A9C7-CC4F203927E3}.Release|x86.ActiveCfg = Release|Any CPU
  {D16F36B2-A5A9-495B-A9C7-CC4F203927E3}.Release|x86.Build.0 = Release|Any CPU
  {ED907129-D6CC-46FA-9F40-DA4FEAFA93F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
  {ED907129-D6CC-46FA-9F40-DA4FEAFA93F2}.Debug|Any CPU.Build.0 = Debug|Any CPU
  {ED907129-D6CC-46FA-9F40-DA4FEAFA93F2}.Debug|x64.ActiveCfg = Debug|Any CPU
  {ED907129-D6CC-46FA-9F40-DA4FEAFA93F2}.Debug|x64.Build.0 = Debug|Any CPU
  {ED907129-D6CC-46FA-9F40-DA4FEAFA93F2}.Debug|x86.ActiveCfg = Debug|Any CPU
  {ED907129-D6CC-46FA-9F40-DA4FEAFA93F2}.Debug|x86.Build.0 = Debug|Any CPU
  {ED907129-D6CC-46FA-9F40-DA4FEAFA93F2}.Release|Any CPU.ActiveCfg = Release|Any CPU
  {ED907129-D6CC-46FA-9F40-DA4FEAFA93F2}.Release|Any CPU.Build.0 = Release|Any CPU
  {ED907129-D6CC-46FA-9F40-DA4FEAFA93F2}.Release|x64.ActiveCfg = Release|Any CPU
  {ED907129-D6CC-46FA-9F40-DA4FEAFA93F2}.Release|x64.Build.0 = Release|Any CPU
  {ED907129-D6CC-46FA-9F40-DA4FEAFA93F2}.Release|x86.ActiveCfg = Release|Any CPU
  {ED907129-D6CC-46FA-9F40-DA4FEAFA93F2}.Release|x86.Build.0 = Release|Any CPU
  {3C8F8722-D0E9-4A1F-9067-299A36A599E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
  {3C8F8722-D0E9-4A1F-9067-299A36A599E7}.Debug|Any CPU.Build.0 = Debug|Any CPU
  {3C8F8722-D0E9-4A1F-9067-299A36A599E7}.Debug|x64.ActiveCfg = Debug|Any CPU
  {3C8F8722-D0E9-4A1F-9067-299A36A599E7}.Debug|x64.Build.0 = Debug|Any CPU
  {3C8F8722-D0E9-4A1F-9067-299A36A599E7}.Debug|x86.ActiveCfg = Debug|Any CPU
  {3C8F8722-D0E9-4A1F-9067-299A36A599E7}.Debug|x86.Build.0 = Debug|Any CPU
  {3C8F8722-D0E9-4A1F-9067-299A36A599E7}.Release|Any CPU.ActiveCfg = Release|Any CPU
  {3C8F8722-D0E9-4A1F-9067-299A36A599E7}.Release|Any CPU.Build.0 = Release|Any CPU
  {3C8F8722-D0E9-4A1F-9067-299A36A599E7}.Release|x64.ActiveCfg = Release|Any CPU
  {3C8F8722-D0E9-4A1F-9067-299A36A599E7}.Release|x64.Build.0 = Release|Any CPU
  {3C8F8722-D0E9-4A1F-9067-299A36A599E7}.Release|x86.ActiveCfg = Release|Any CPU
  {3C8F8722-D0E9-4A1F-9067-299A36A599E7}.Release|x86.Build.0 = Release|Any CPU
 EndGlobalSection
 GlobalSection(NestedProjects) = preSolution
  {07B7AD92-68A6-4744-9C9D-0874ACC0895C} = {93FF0703-CB28-47B0-AB46-86E80B7A53F7}
  {D16F36B2-A5A9-495B-A9C7-CC4F203927E3} = {0A5C6C6F-D3BD-404F-B515-05B4003C5711}
  {ED907129-D6CC-46FA-9F40-DA4FEAFA93F2} = {0A5C6C6F-D3BD-404F-B515-05B4003C5711}
  {3C8F8722-D0E9-4A1F-9067-299A36A599E7} = {93FF0703-CB28-47B0-AB46-86E80B7A53F7}
 EndGlobalSection
EndGlobal

slnx 解决方案文件

<Solution>
  <Folder Name="/src/">
    <Project Path="src/dotnet-exec/dotnet-exec.csproj" />
    <Project Path="src/ReferenceResolver/ReferenceResolver.csproj" />
  </Folder>
  <Folder Name="/tests/">
    <Project Path="tests/IntegrationTest/IntegrationTest.csproj" />
    <Project Path="tests/UnitTest/UnitTest.csproj" />
  </Folder>
</Solution>

可以看到新的格式大大地简化了原有的解决方案文件, 原来几十行的文件现在只需要几行就可以了

Command

dotnet new sln

dotnet new sln 支持了新的 --format 选项, 可以指定为 slnx 来创建 slnx 解决方案文件

dotnet new sln --help

dotnet sln migrate

dotnet-cli 支持使用 dotnet sln migrate 命令一键从 sln 迁移到 slnx

dotnet sln --help
dotnet sln migrate --help

More

刚出来新的格式的时候就很喜欢新的文件的简洁, 但是 dotnet cli 并不支持, 现在 dotnet cli 终于支持了, Rider 和 VisualStudio 也都早早地支持了, CI 也没有遇到什么问题

dotnet-exec 项目已经迁移到新的 slnx 文件, 总体来说没有什么问题, 大家喜欢新的格式的话可以迁移到新的格式上了

References

  • https://medium.com/medialesson/welcome-to-the-new-visual-studio-slnx-solution-file-3c20d37a1cb3
  • https://blog.jetbrains.com/dotnet/2024/10/04/support-for-slnx-solution-files/
  • https://blog.ndepend.com/slnx-the-new-net-solution-xml-file-format/
  • https://github.com/dotnet/sdk/issues/40913
  • https://github.com/dotnet/sdk/pull/44570
  • https://github.com/dotnet/msbuild/pull/10794
  • https://github.com/dotnet/sdk/pull/44469
  • https://github.com/dotnet/sdk/pull/45408
  • https://github.com/dotnet/sdk/pull/45442
  • https://github.com/dotnet/msbuild/issues/10266
  • https://github.com/dotnet/msbuild/pull/10794

【声明】内容源于网络
0
0
amazingdotnet
dotnet 开发知识库,了不起的 dotnet,dotnet 奇淫怪巧
内容 539
粉丝 0
amazingdotnet dotnet 开发知识库,了不起的 dotnet,dotnet 奇淫怪巧
总阅读27
粉丝0
内容539