ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

CleanArchitecture 项目 Dev Container 开发环境配置指南:用 VS Code 与 GitHub Codespaces 一键统一开发环境

CleanArchitecture 项目 Dev Container 开发环境配置指南:用 VS Code 与 GitHub Codespaces 一键统一开发环境 CleanArchitecture 项目 Dev Container 开发环境配置指南用 VS Code 与 GitHub Codespaces 一键统一开发环境【免费下载链接】CleanArchitectureClean Architecture Solution Template for ASP.NET Core项目地址: https://gitcode.com/GitHub_Trending/cle/CleanArchitecture导读本文以 CleanArchitectureClean Architecture Solution Template for ASP.NET Core仓库中的 .devcontainer/README.md 为骨架结合仓库内实际的 .devcontainer/devcontainer.json 配置、global.json 与 README.md 等源码证据系统讲解 Dev Container 开发环境的定义、配置项含义、启动流程及其在 Aspire 全栈编排场景下的实际意义。读完本文你将能看懂并自定义该项目的容器化开发环境掌握在 VS Code 中一键“Reopen in Container”以及让 GitHub Codespaces 自动复现开发环境的完整方法。一、这个文件夹是做什么的仓库根目录下的.devcontainer文件夹存放的是Dev Container开发容器配置用于在容器中运行整个开发环境。根据 .devcontainer/README.md 的说明它的职责可以概括为四句话定义开发环境指定 SDK 版本、系统工具链与 VS Code 扩展保证环境一致确保每一位开发者无论本地还是云端使用完全相同的开发环境简化上手流程消除本地机器环境差异带来的各种安装、配置问题实现“克隆即开发”支持云端开发与 GitHub Codespaces 天然集成仓库一打开即可获得可复现的云端开发环境。其中“保证环境一致”是 Dev Container 的核心价值传统开发中“我这能编译、你那不行”的根源在于各人本机的 SDK 版本、工具链和系统依赖不同而开发容器把整个工具链封装进一个镜像从根本上消除这种漂移。二、仓库里的实际配置文件devcontainer.json 逐项拆解.devcontainer目录下实际有两个文件README.md使用说明和 devcontainer.json核心配置。下面结合仓库实际内容逐项讲解 devcontainer.json 中每个配置字段的含义与用途{ name: CleanArchitecture, image: mcr.microsoft.com/devcontainers/python:3.13-bullseye, features: { ghcr.io/devcontainers/features/docker-in-docker:2: { } }, customizations: { vscode: { extensions: [ GitHub.vscode-github-actions, ms-azuretools.vscode-docker ] } }, forwardPorts: [], postCreateCommand: , remoteUser: vscode, hostRequirements: { memory: 8gb } }配置字段当前仓库取值作用说明nameCleanArchitecture容器的显示名称便于在 VS Code / Codespaces 界面中识别imagemcr.microsoft.com/devcontainers/python:3.13-bullseye容器的基础镜像。这里选用的是微软官方通用的python:3.13-bullseye开发容器镜像而非 .NET 专用镜像配合下方features机制按需叠加能力属于一种“通用基础镜像 按需扩展”的设计featuresdocker-in-docker:2ghcr.io/devcontainers/features安装 Docker-in-Docker 特性使容器内部可以直接运行 Docker 命令与容器这是本项目能用 Aspire 在容器内拉起数据库容器的关键customizations.vscode.extensionsGitHub.vscode-github-actions、ms-azuretools.vscode-docker容器启动时自动安装的 VS Code 扩展GitHub Actions 扩展用于查看/管理 CI 工作流Docker 扩展用于管理容器与镜像forwardPorts[]空将容器内端口转发到本机 localhost便于本地访问应用与 Aspire Dashboard当前为空注释提示“按需添加”postCreateCommand空容器创建完成后执行的初始化命令如dotnet restore、npm install当前为空是留给使用方自定义的扩展点remoteUservscode容器内默认登录用户为非 root 的vscode用户符合安全最小权限原则hostRequirements.memory8gb宿主机最低内存要求8 GB。这并非随意设定——本项目通过 Aspire 同时编排 Web API、数据库容器与前端开发服务器详见下文第四节对内存占用有实际需求值得说明的是配置文件里保留了多处注释如// Include other VSCode language extensions if needed、// Forward ports if needed for local development从内容结构看这份 devcontainer.json 更像一个“最小可用的起始配置”它提供了镜像、DinD 能力与基础扩展同时把端口转发、初始化命令等留作扩展点使用者可按需补充。例如需要 Web 端调试时可将 Aspire Dashboard默认 18888 端口与 Web API 端口加入forwardPorts或将dotnet restore写入postCreateCommand以加速首次启动。三、何时使用与如何启动两种接入方式根据 .devcontainer/README.md 的说明接入 Dev Container 有两种方式方式一本地 VS Code安装 VS Code 官方扩展“Dev Containers”扩展 IDms-vscode-remote.remote-containers在 VS Code 中打开本仓库点击右下角或命令面板CtrlShiftP中的“Reopen in Container”在容器中重新打开。此时 VS Code 会依据.devcontainer/devcontainer.json拉取镜像、应用 features、安装扩展并把整个编辑器环境“搬进”容器。首次构建需要下载镜像之后再次打开会直接复用已构建的容器速度明显更快。方式二GitHub Codespaces云端开发在 GitHub 仓库页面点击“Code → Codespaces → Create codespace on branch”即可。由于仓库根目录存在.devcontainer目录Codespaces 在创建工作区时会自动读取并使用这套配置无需任何手动干预——这正是“克隆即开发”在云端的体现团队新成员甚至不需要在本机安装 .NET SDK、Node.js 或 Docker打开一个 Codespace 就能获得与其他人一致的开发环境。启动后做什么环境就绪后可以按照 README.md 中的步骤运行整个应用栈dotnet run --project ./src/AppHost运行后 Aspire Dashboard 会自动打开展示各服务的访问地址与日志详见 src/AppHost/Program.cs 中的编排逻辑。四、为什么本项目需要 Docker-in-Docker与 Aspire 编排的联动.devcontainer配置中唯一启用且至关重要的 feature 是docker-in-dockerDinD这并非可有可无的装饰而是与本项目的运行架构直接相关。本项目以Aspire作为本地开发与测试的编排层参见架构决策记录 docs/decisions/ADR-002-Aspire-For-Orchestration-And-Testing.md。在 src/AppHost/Program.cs 中可以看到AppHost 会根据模板选项编排整个技术栈数据库服务默认 SQLiteAddSqlite选择 PostgreSQL 或 SQL Server 变体时则通过RunAsContainer以容器方式运行数据库AddAzurePostgresFlexibleServer(...).RunAsContainer(...)/AddAzureSqlServer(...).RunAsContainer(...)Web API 服务AddProjectProjects.Web并WithReference(databaseServer)建立服务引用通过WithUrlForEndpoint将 Scalar API 文档入口/scalar暴露给开发者前端服务非--client-framework none时通过AddJavaScriptApp运行./../Web/ClientApp并执行start脚本启动 Angular/React 开发服务器。也就是说当使用 PostgreSQL / SQL Server 变体时开发容器内部需要能够运行数据库容器这只有在容器内具备 Docker 能力DinD的前提下才可能实现。README 的 环境要求 也印证了这一点使用 SQL Server 或 PostgreSQL 时需要 Docker Desktop 或 Podman任何 OCI 兼容容器运行时而默认的 SQLite 变体则不需要。此外ADR-002 还指出 Aspire 为本地开发带来了 Dashboard、结构化日志、分布式追踪OpenTelemetry、健康检查、服务发现按服务名互相引用而非硬编码地址与端口等开箱即用的能力——这些能力在开发容器内部同样可用hostRequirements.memory要求 8 GB 内存正是考虑到“开发容器 Aspire 编排 数据库容器 前端 dev server”同时运行时的资源开销。五、SDK 版本与本项目技术栈概览进入开发容器后你需要与之打交道的核心技术栈与版本约束如下均以仓库实际文件为准.NET SDK仓库根目录的 global.json 固定了 SDK 版本为10.0.400并设置rollForward: latestFeature允许在同一 feature 带内前滚。Directory.Build.props 将目标框架统一为net10.0并开启ImplicitUsings、Nullable与TreatWarningsAsErrors。包管理Directory.Packages.props 启用了 NuGet 集中包管理ManagePackageVersionsCentrally可以看到 EF Core 10、MediatR、AutoMapper、FluentValidation、Aspire 相关包、OpenTelemetry 等统一在此定义版本。前端Angular 或 React按模板选项生成目录见 src/Web/ClientApp 与 src/Web/ClientApp-React因此 Node.jsLTS在需要前端时也是开发环境的一部分。数据库默认 SQLite可选 PostgreSQL / SQL Server后者需要容器运行时支持见上文第四节。注意当前 devcontainer.json 的postCreateCommand为空且未额外安装 .NET/Node 工具链扩展。从配置结构看这份文件定位为通用基础容器 可扩展骨架实际使用中建议按需将 SDK 安装、dotnet restore、npm install等步骤补充进features或postCreateCommand以缩短每次进入容器后的准备时间。六、注意事项与边界.devcontainer/README.md 在最后特别强调了一点This folder has no effect on the runtime application. It is only used to configure the developer environment.即.devcontainer文件夹对运行时应用没有任何影响——它只作用于开发环境配置不会进入最终构建产物也不参与 Web API、前端或数据库的运行。这一点保证了仓库的“开发体验”与“运行产物”相互独立删掉该目录应用照常编译运行保留该目录则团队获得一致的开发体验。七、深入阅读使用说明原文.devcontainer/README.md核心配置文件.devcontainer/devcontainer.json项目总览与运行步骤README.mdAspire 编排逻辑src/AppHost/Program.cs 与服务命名约定 src/Shared/Services.cs选用 Aspire 的架构决策记录docs/decisions/ADR-002-Aspire-For-Orchestration-And-Testing.mdSDK 版本约束global.json 与统一构建属性 Directory.Build.props依赖版本总表Directory.Packages.props【免费下载链接】CleanArchitectureClean Architecture Solution Template for ASP.NET Core项目地址: https://gitcode.com/GitHub_Trending/cle/CleanArchitecture创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表