菜单

项目结构

相关源文件

本文档详细介绍了 v2rayN 代码库的组织结构,包括其项目、它们之间的关系以及整个仓库的结构。它为理解系统中各个组件如何协同工作提供了路线图。

存储库概览

v2rayN 仓库被组织成几个独立的 .NET 项目,每个项目在应用程序生态系统中扮演着特定的角色。该仓库旨在支持特定于 Windows 和跨平台实现,同时共享核心功能。

来源:v2rayN/v2rayN.sln v2rayN/Directory.Build.props .gitmodules

项目结构和关系

该解决方案包含五个主要项目,每个项目在应用程序生态系统中扮演着特定的角色。

项目类型目的框架
v2rayNWPF 应用程序特定于 Windows 的 GUInet8.0-windows10.0.17763
ServiceLib类库核心共享功能net8.0
v2rayN.DesktopAvalonia 应用程序跨平台 GUInet8.0
AmazTool控制台应用程序升级工具net8.0
GlobalHotKeys类库全局热键功能net8.0

解决方案组织

整个解决方案的结构如下:

来源:v2rayN/v2rayN.sln

主要项目

v2rayN (Windows WPF 应用程序)

v2rayN 项目是使用 WPF (Windows Presentation Foundation) 构建的特定于 Windows 的 GUI 应用程序。它提供了具有 Material Design 风格的原生 Windows 体验。

主要特性

  • 目标 .NET 8.0,兼容 Windows 10.0.17763+
  • 使用 Material Design 主题进行 UI 样式设计
  • 使用 ReactiveUI 实现 MVVM 模式
  • 通过 H.NotifyIcon.Wpf 实现系统托盘集成
  • 包含特定于 Windows 的代理处理

来源:v2rayN/v2rayN/v2rayN.csproj

ServiceLib (核心库)

ServiceLib 是核心库,包含 v2rayN 和 v2rayN.Desktop 都使用的共享功能。它封装了业务逻辑、配置处理、代理管理和其他常见功能。

关键组件

  • 配置管理
  • 核心代理进程处理
  • 更新机制
  • 速度测试功能
  • 国际化资源
  • 示例配置文件和模板
  • 数据库交互 (SQLite)

来源:v2rayN/ServiceLib/ServiceLib.csproj

ServiceLib 中的重要组件

  1. 嵌入式资源:包含不同平台的示例配置、路由规则和代理设置。
  2. 本地化:包含多种语言的资源(英语、中文、俄语、波斯语、匈牙利语)。
  3. 第三方集成:包含 SQLite、下载、WebDAV、QR 码等包。

v2rayN.Desktop (跨平台 UI)

v2rayN.Desktop 项目是使用 Avalonia UI 框架实现的跨平台版本,允许应用程序在 Windows、Linux 和 macOS 上运行。

主要特性

  • 使用 Avalonia UI 框架实现跨平台兼容性
  • 通过 ServiceLib 与 Windows 版本共享核心功能
  • 为每个操作系统实现特定于平台的系统集成
  • 使用 Semi.Avalonia 主题实现跨平台的视觉一致性
  • 利用 GlobalHotKeys 库支持热键

来源:v2rayN/v2rayN.Desktop/v2rayN.Desktop.csproj v2rayN/v2rayN.Desktop/Handler/HotkeyHandler.cs

AmazTool (升级工具)

AmazTool 是一个控制台应用程序,用于升级或更新 v2rayN 和 v2rayN.Desktop。

目的

  • 为应用程序提供升级功能
  • 包含用于自动更新的可执行工具
  • 简单的控制台界面

来源:v2rayN/AmazTool/AmazTool.csproj

GlobalHotKeys (热键库)

GlobalHotKeys 作为 Git 子模块包含,并提供跨不同平台注册和处理全局热键的功能。

主要功能

  • 跨平台热键注册
  • 基于事件的热键处理
  • v2rayN.Desktop 用于全局快捷键

来源:.gitmodules

构建和包管理

该仓库采用了现代的 .NET 构建和包管理方法。

集中式包管理

包版本集中管理在 Directory.Packages.props 中,确保了所有项目的一致性。这种方法简化了依赖项管理和版本控制。

项目中使用的主要包

  • UI 框架:Avalonia,MaterialDesignThemes
  • MVVM 模式:ReactiveUI
  • 数据库:sqlite-net-pcl
  • 网络:WebDav.Client,Downloader
  • 实用工具:YamlDotNet,QRCoder,CliWrap

来源:v2rayN/Directory.Packages.props

共享构建属性

通用构建属性定义在 Directory.Build.props 中,包括:

  • 版本信息 (7.11.2)
  • 目标框架 (.NET 8.0)
  • 通用编译器设置
  • 作者和许可证信息
  • 发布配置设置

来源:v2rayN/Directory.Build.props

GitHub Actions 自动化构建

该仓库使用 GitHub Actions 工作流进行自动化构建和打包。

来源:v2rayN/v2rayN.sln22-36

依赖更新

该仓库使用 Dependabot 进行自动依赖更新。

  • 每日检查 NuGet 包更新
  • 每日检查 GitHub Actions 更新

来源:.github/dependabot.yml

跨平台支持

该仓库的架构旨在通过以下方式支持多平台:

  1. ServiceLib 中的共享核心功能
  2. 特定于平台的 UI 实现
    • Windows 版 WPF (v2rayN)
    • 跨平台版 Avalonia (v2rayN.Desktop)
  3. 特定于平台的系统代理处理

来源:v2rayN/ServiceLib/ServiceLib.csproj32-33

总结

v2rayN 仓库的架构设计遵循了良好的结构化原则,分离了关注点,同时最大限度地提高了代码复用性。

  1. 核心功能:集中在 ServiceLib 中
  2. UI 实现:
    • 原生 Windows UI (v2rayN)
    • 跨平台 UI (v2rayN.Desktop)
  3. 支持工具:
    • AmazTool 用于升级
    • GlobalHotKeys 用于热键处理
  4. 现代构建系统:
    • 集中式包管理
    • 共享构建属性
    • 自动化构建和打包
    • 依赖管理

这种架构使应用程序能够高效地在多个平台上运行,同时保持一致的核心代码库和功能集。