---
name: saury-revit
description: 基于 Saury.Revit.Template 创建 Revit 插件项目。当用户要求创建 Revit 插件、新建 Revit 项目、初始化 Revit 开发环境、使用 saury-revit 模板时触发。覆盖场景:(1) 创建新 Revit 插件项目 (2) 安装/更新 saury-revit dotnet 模板 (3) 在已创建的项目中添加新功能(Command/View/ViewModel/Service)。关键词:Revit、插件、plugin、saury-revit、dotnet new。
license: MIT
metadata:
author: hopesy
version: "1.0.3"
---
# Saury Revit 项目创建器
基于 `Saury.Revit.Template` dotnet 模板,通过交互式流程创建完整配置的 Revit 2026 插件项目(MVVM + DI 架构)。
## 工作流程
按顺序执行以下步骤,每步完成后再进入下一步。
### 第 1 步:交互式确认项目配置
执行任何命令前,必须向用户确认以下信息:
**必问:**
1. **项目名称** — 必须是合法 C# 命名空间名(如 `Acme.WallTools`、`JD.RevitHelper`),默认 `RevitDemo` 或 `RevitTest`。该名称将用于解决方案、项目文件夹、命名空间、程序集、addin 文件、Ribbon 选项卡。
2. **项目创建目录** — 默认当前工作目录。
**可选(有默认值,仅需确认):**
3. **Revit 版本** — 默认 `2026`,通过 `--RevitVersion` 参数指定。
用户确认后,汇总配置让用户做最终确认再执行。
### 第 2 步:检查并安装 .NET 环境
**检测流程(按顺序执行):**
1. **检测 dotnet CLI 是否存在**:
```bash
where dotnet
```
2. **若命令存在**,检测 SDK 版本:
```bash
dotnet --list-sdks
```
检查输出中是否包含 `8.0` 或更高版本的 SDK。
3. **判断结果**:
- dotnet CLI 存在 且 SDK 8.0+ 已安装 → 跳过,进入下一步
- dotnet CLI 存在 但 无 SDK 或版本不足 → 需要安装 SDK
- dotnet CLI 不存在 → 需要完整安装
**安装方式(按优先级尝试):**
```bash
winget install Microsoft.DotNet.SDK.8
```
- 安装完成后重新验证:`where dotnet && dotnet --list-sdks`
- 若 `winget` 不可用,改用官方脚本安装:
```powershell
Invoke-WebRequest -Uri https://dot.net/v1/dotnet-install.ps1 -OutFile dotnet-install.ps1
./dotnet-install.ps1 -Channel 8.0
```
- 若以上方式均失败,告知用户手动下载 [.NET 8.0 SDK](https://dotnet.microsoft.com/download/dotnet/8.0)
### 第 3 步:安装模板
```bash
# 检查是否已安装
dotnet new list saury-revit
```
- 若已安装 → 跳过,告知用户当前已安装
- 若未安装 → 执行安装:
```bash
dotnet new install Saury.Revit.Template
```
- 若需更新 → `dotnet new install Saury.Revit.Template --force`
### 第 4 步:创建项目
```bash
dotnet new saury-revit -n <项目名称> -o <输出目录>
```
| 参数 | 说明 | 示例 |
|---|---|---|
| `-n` | 项目名称(替换所有 `Saury.Revit.Template`) | `Acme.WallTools` |
| `-o` | 输出目录 | `./Acme.WallTools` |
| `--RevitVersion` | Revit 版本(默认 2026) | `2026` |
**模板自动完成:**
- 全局替换 `Saury.Revit.Template` → 用户项目名
- 自动生成唯一 GUID 替换 `ADDIN-GUID-PLACEHOLDER`
- 排除 `.template.config/`、`bin/`、`obj/`、`.vs/`、`Logs/`、`*.user`
### 第 5 步:验证项目结构
创建后,列出目录确认结构完整:
```
<项目名称>/
├── <项目名称>.slnx
└── <项目名称>/
├── Commands/AboutCommand.cs
├── Extensions/DataContextExtension.cs
├── Models/AboutInfo.cs
├── ViewModels/AboutViewModel.cs
├── Views/AboutView.xaml(.cs)
├── Resources/Icons/about.png
├── Resources/Styles/ButtonStyles.xaml
├── Services/Interfaces/
├── Application.cs
├── Host.cs
├── appsettings.json
├── <项目名称>.addin
└── <项目名称>.csproj
```
### 第 6 步:构建验证
```bash
cd <输出目录>
dotnet restore
dotnet build --configuration Debug_R26
```
**关键**:本项目使用 `Debug_R26` / `Release_R26`,**禁止**使用标准 `Debug` / `Release`,否则构建失败。
构建成功后,编译产物自动复制到 `C:\ProgramData\Autodesk\Revit\Addins\2026\`。
### 第 7 步:告知用户如何使用
构建成功后,向用户展示以下使用说明:
#### 调试启动配置
1. **修改 Revit 路径** — 打开 `<项目名称>.csproj`,找到 `StartProgram` 属性,确认路径指向本机 Revit 安装位置:
```xml
C:\Program Files\Autodesk\Revit 2026\Revit.exe
```
> 若 Revit 安装在非默认路径,需修改为实际路径。
2. **用 Visual Studio 或 Rider 打开** `<项目名称>.slnx`
3. **选择构建配置** `Debug_R26`(工具栏下拉框,**不要选** `Debug`)
4. **点击启动/F5** — 自动编译 → 产物复制到 Addins 目录 → 启动 Revit → 附加调试器
5. **Revit 启动后** — 在 Ribbon 选项卡中找到插件按钮,点击即可触发断点调试
#### 后续定制
1. **厂商信息**(`<项目名称>.addin`)— VendorId、VendorDescription、VendorEmail
2. **关于页信息**(`Models/AboutInfo.cs`)— GiteeUrl、Description
3. **添加新功能** — 参见 [architecture.md](references/architecture.md)
## 添加新功能
当用户要求在已创建的项目中添加新功能时,阅读 [references/architecture.md](references/architecture.md) 获取完整的代码模板和规则约束,严格按照 A→F 六步流程执行:
1. **Model** → `Models/` 目录
2. **ViewModel** → `ViewModels/` 目录(`partial class`,继承 `ObservableObject`)
3. **View** → `Views/` 目录(构造函数注入 ViewModel)
4. **Command** → `Commands/` 目录(`[Transaction(TransactionMode.Manual)]`)
5. **DI 注册** → `Host.cs`(`AddTransient`)
6. **Ribbon 按钮** → `Application.cs` 的 `CreateRibbon` 方法
## 禁止事项
- 禁止使用 `Debug` / `Release` 配置,只能用 `Debug_R26` / `Release_R26`
- 禁止手动 `new` View 或 ViewModel,必须通过 `Host.GetService()` 获取
- 禁止在 View code-behind 中编写业务逻辑
- 禁止在 ViewModel 中直接调用 `MessageBox` 或操作 `Window`
- 禁止硬编码配置值,使用 `appsettings.json` + `IOptions`
- 除非用户明确要求,不要删除示例 About 功能