1. 引言
在網路受限或完全離線的環境中開發 .NET 專案(本文範例為 Avalonia UI 專案),可能會遇到一些挑戰。本文將為您提供一套完整的離線開發解決方案,包括 IDE 的安裝、Avalonia UI 範本的配置、私有化 NuGet 服務的部署以及 NuGet 套件的製作和上傳等。
2. IDE 安裝指南
Visual Studio 2022 安裝
Visual Studio 2022 是微軟推出的最新 IDE,支援 Avalonia UI 專案的開發。以下是詳細的離線安裝步驟:
- 離線安裝包製作:首先,根據網友 VS2022 離線安裝包 的指南,製作 Visual Studio 2022 的離線安裝包。
- Avalonia UI 擴充功能安裝:安裝 Visual Studio 後,透過 Visual Studio Marketplace 下載並安裝 Avalonia for Visual Studio 2022 擴充功能。

- 安裝過程中遇到失敗

根據微信群內 @rabbitism 的解答(感謝 @daidai_cn 的協助),我們可以透過解壓該擴充功能檔案,刪除下圖框選的 Extension.vsext 檔案後再進行安裝:

正常安裝了:

JetBrains Rider 安裝
JetBrains Rider IDE 在 2020.3 版本中開始內建支援 Avalonia XAML,包括對 Avalonia 特定 XAML 功能和自訂程式碼檢查的一流支援。
離線安裝包下載地址:下載 Rider:跨平台 .NET IDE (jetbrains.com)
3. 安裝 Avalonia UI 範本
線上安裝請參考文件 Avalonia Docs,離線安裝請點選 Avalonia.Templates 下載:

安裝方式同上圖 .NET CLI 命令指令碼:
dotnet new install avalonia.templates.11.0.10.1.nupkg

現在,無論是在 Visual Studio 還是 JetBrains Rider 中,您都可以使用 Avalonia UI 範本來建立新專案了。
VS 2022 中 Avalonia UI 範本:

Rider 中使用範本:

4. 私有化部署 NuGet 服務
建立好專案後,程式也是無法正常執行的,預設範本依賴 Avalonia UI 的一些 NuGet 套件,需要線上安裝,可以直接把相關函式庫複製到內網,但一個一個複製、引用還是很麻煩。
為了方便團隊內部成員之間共享和管理 NuGet 套件,您可以考慮部署私有 NuGet 服務。本文推薦使用 BaGet 作為輕量級的 NuGet 伺服器,參考該 BaGet 專案說明:
- 安裝 .NET Core 3.1 SDK,該程式能支援的 .NET 最新版本,有興趣可以 Clone 修改成
.NET 8\9(PR 中有驚喜,網友有 PR 升級分支); - 下載最新版的 Release 壓縮包 Releases · loic-sharma/BaGet
- 執行服務
dotnet BaGet.dll - 瀏覽器開啟
http://localhost:5000存取:

OK,這就算部署完成了。
5. NuGet 套件製作(可略)
網上教學較多,可簡單設定函式庫的專案檔支援 NuGet 套件產生,參考 CodeWF.EventBus:
<Project>
<PropertyGroup>
<Company>https://codewf.com</Company>
<Authors>沙漠盡頭的狼</Authors>
<Owners>https://codewf.com</Owners>
<AssemblyVersion>$(Version)</AssemblyVersion>
<FileVersion>$(Version)</FileVersion>
<Version>$(Version)</Version>
<Description>透過 CodeWF.EventBus 提供的 事件匯流排,我們可以很輕鬆的實現 CQRS 模式。根據業務需求,我們可以建立並維護讀模型,將讀操作和寫操作進行分離,從而提高應用程式的可擴充性和效能。可在各種範本專案使用:WPF、Winform、AvaloniaUI、ASP.NET Core 等。The CodeWF.EventBus allows us to easily implement the CQRS mode. According to business requirements, we can create and maintain a read model to separate read and write operations, thereby improving the scalability and performance of the application. Can be used in various template projects: WPF, Winform, AvaloniaUI, ASP. NET Core, etc.</Description>
<ApplicationIcon>Resources\logo.ico</ApplicationIcon>
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
<Title>$(AssemblyName)</Title>
<Copyright>Copyright © https://codewf.com 2024</Copyright>
<AssemblyName>$(AssemblyName)</AssemblyName>
<RootNamespace>$(AssemblyName)</RootNamespace>
<PackageId>$(AssemblyName)</PackageId>
<PackageTags>C# EventBus; WPF; Winform; AvaloniaUI,ASP.NET Core;</PackageTags>
<PackageIcon>logo.png</PackageIcon>
<PackageProjectUrl>https://github.com/dotnet9/CodeWF.EventBus</PackageProjectUrl>
<RepositoryUrl>https://github.com/dotnet9/CodeWF.EventBus</RepositoryUrl>
</PropertyGroup>
<ItemGroup>
<None Include="Resources\logo.png">
<Pack>True</Pack>
<PackagePath>\</PackagePath>
</None>
</ItemGroup>
</Project>
產生函式庫專案時就會產生相應的 NuGet 檔案,這裡是已經發佈的 NuGet 套件位址:https://www.nuget.org/packages/CodeWF.EventBus
6. NuGet 套件上傳
可以上傳自己製作的 NuGet 套件,也可以上傳從 NuGet 官網 或第三方獲得的 NuGet 套件。
我們開啟自己部署的 NuGet 首頁 http://localhost:5000:

點選 Upload a package,切換到 NuGet 套件上傳命令說明:

我們以 .NET CLI 上傳 NuGet 套件舉例,首先準備 NuGet 檔案,比如從 NuGet 官網搜尋 下載 Avalonia UI 的基礎套件:


下載好以後,在當前下載目錄開啟 CMD 命令列輸入:
dotnet nuget push -s http://localhost:5000/v3/index.json avalonia.11.1.0-rc1.nupkg

上面提示 NuGet 服務配置了金鑰,我們為了簡單,先停止 NuGet 服務,開啟它的設定檔 appsettings.json,清空 ApiKey 節點值,再執行 NuGet 服務:

再執行上傳命令,現在成功了:

NuGet 首頁也能搜尋到了:

7. IDE 配置 NuGet 來源
複製前面 NuGet 上傳頁面圖中紅色字體的 URL 位址:http://localhost:5000/v3/index.json,在 VS 中配置 NuGet 搜尋位址:

剩下的就和平時安裝套件一致了。
小知識:個人臨時開發可將上面的來源配置為本機 NuGet 目錄路徑。
8. 總結
本文介紹了如何在本機網路環境中成功安裝並配置 AvaloniaUI 所需的開發工具和範本,以及如何部署私有 NuGet 服務並製作及上傳 NuGet 套件,以便團隊內部成員之間共享和管理 NuGet 套件。
希望這些資訊能對您的 AvaloniaUI 專案開發有所幫助。如有其他問題,歡迎隨時向我提問。