C# 如何部分載入「超大」解決方案中的部分專案

2023-02-10 09:00:24

在有的特有的專案環境下,團隊會將所有的專案使用同一個解決方案進行管理。這種方式方面了管理,但是卻會導致解決方案變得非常龐大,導致載入時間過長。那麼,如何部分載入解決方案中的部分專案呢?就讓我們來借用微軟退出的 slngen 工具來體驗一下部分載入解決方案中的部分專案吧。

slngen 從根專案生成臨時解決方案

SlnGen 是一個 Visual Studio 解決方案檔案生成器。Visual Studio 解決方案對於大型專案樹來說通常不能很好地擴充套件。SlnGen 讀取一個給定專案的專案參照,按需建立一個 Visual Studio 解決方案。例如,你可以針對一個單元測試專案執行 SlnGen,並呈現一個包含單元測試專案及其所有專案參照的 Visual Studio 解決方案。你也可以針對一個有根的資料夾中的遍歷專案執行 SlnGen,開啟一個包含你的專案樹的那個檢視的 Visual Studio 解決方案。

安裝 slngen

dotnet tool install --global Microsoft.VisualStudio.SlnGen.Tool --add-source https://api.nuget.org/v3/index.json --ignore-failed-sources

執行以上命令,你就可以在全域性安裝 slngen 工具了。然後,你就可以在任何地方使用 slngen 命令了。

slngen --help

最近我們正在組織全新的技術交流方式,歡迎點選連結蒞臨指導 https://www.newbe.pro/links/

為所有的專案引入 Microsoft.VisualStudio.SlnGen

在你的專案樹中,你需要為所有的專案引入 Microsoft.VisualStudio.SlnGen 包。可以通過 Directory.Build.props 來輕鬆實現。

<ItemGroup>
  <PackageReference Include="Microsoft.VisualStudio.SlnGen" Version="9.5.2" />
</ItemGroup>

準備一個臨時的測試專案

為了方便演示,我們建立三個專案,分別是 slngen-demo、slngen-demo-a、slngen-demo-b。

其中,slngen-demo-a 和 slngen-demo-b 專案都參照了 slngen-demo 專案。

mkdir slngen-demo
cd slngen-demo
dotnet new classlib -o slngen-demo
dotnet new console -o slngen-demo-a
dotnet new console -o slngen-demo-b
cd slngen-demo-a
dotnet add reference ../slngen-demo/slngen-demo.csproj
cd ../slngen-demo-b
dotnet add reference ../slngen-demo/slngen-demo.csproj

資料夾結構大致如下:

C:\REPOS\SLNGEN-DEMO
│  Directory.Build.props
│
├─slngen-demo
│  │  Class1.cs
│  │  slngen-demo.csproj
│  │
│  ├─bin
│  └─obj
│
├─slngen-demo-a
│  │  Program.cs
│  │  slngen-demo-a.csproj
│  │
│  ├─bin
│  └─obj
│
└─slngen-demo-b
    │  Program.cs
    │  slngen-demo-b.csproj
    └─obj

使用 slngen 生成臨時解決方案

注意 slngen 是通過驅動 Visual Studio 來生成解決方案的。因此需要在命令列中具備 MSBuild.exe 的路徑。

因此我們需要使用 Developer Command Prompt for VS 2022 來執行 slngen 命令。

我們來使用 slngen 載入 slngen-demo-a 專案。

slngen slngen-demo-a/slngen-demo-a.csproj

通過以上命令,我們就使用 slngen 載入了 slngen-demo-a 專案。

這種方式可以載入 slngen-demo-a 專案和 slngen-demo,但是 slngen-demo-b 專案並沒有被載入。

執行結果大致如下:

C:\Repos\slngen-demo>slngen slngen-demo-a/slngen-demo-a.csproj
SlnGen version 9.5.2+b19739dfbc for .NET Framework
Copyright (c) Microsoft Corporation.  Licensed under the MIT license.

Build started 2/9/2023 8:29:24 PM.
Generating solution for project "C:\Repos\slngen-demo\slngen-demo-a\slngen-demo-a.csproj"
Loading project references...
Loaded 2 project(s) in 840ms
Generating Visual Studio solution "C:\Repos\slngen-demo\slngen-demo-a\slngen-demo-a.sln" ...
Updating existing solution file and reusing Visual Studio cache
Launching Visual Studio...

Success
    0 Warning(s)
    0 Error(s)

Time Elapsed 00:00:01.33

總結

通過 slngen,我們可以很方便地載入一個專案及其所有的專案參照。這對於我們在 Visual Studio 中開啟一個專案樹的檢視非常有用。可惜 Rider 不得行。

參考資料

感謝您的閱讀,如果您覺得本文有用,請點贊、關注和轉發。最近我們正在組織全新的技術交流方式,歡迎點選連結蒞臨指導 https://www.newbe.pro/links/


  1. https://learn.microsoft.com/visualstudio/msbuild/customize-your-build?view=vs-2022&WT.mc_id=DX-MVP-5003606

  2. https://www.nuget.org/packages/Microsoft.VisualStudio.SlnGen.Tool

  3. https://github.com/microsoft/slngen