资讯详情

RevitLookup 2020编译安装与addin注册排错指南

📅 2026/10/20 7:13:01 | 华诺云谱 👁 阅读
RevitLookup 2020编译安装与addin注册排错指南
简介RevitLookup 2020 是面向 Revit 二次开发者的查找表与对象浏览工具广泛用于插件调试、API 学习和数据结构排查。它能在调试过程中直观列出元素的属性、参数、几何及共享数据解决开发时对象内部信息不可见、难定位的问题适合 Revit 2020 环境下的初级到中级开发者。压缩包约 1.05MB共 161 个文件其中 78 个 C# 源码文件构成核心逻辑resx/resources 保留界面多语言资源bmp/ico/png 图标用于工具栏与树节点addin 与 3 个 DLL 可直接部署运行附带 HTML/XSL 帮助文档和 sln/csproj 工程文件目录结构清晰便于安装或二次编译。已有 1654 人学习/下载作者标注“亲测可用”。使用者可获得完整 Visual Studio 工程源码、可运行程序集、调试符号及图标资源若默认路径不可用还可在源码中调整引用后自行生成 DLL不但能快速搭建 Revit 插件调试环境也有助于深入理解 Lookup 的实现与 Revit API 对象模型。1. 先装一遍才算数RevitLookup 2020 不是复制个 dll 就能跑凡是做过 Revit 二次开发的人大概率都经历过这种场景插件跑出个异常结果想看某个元素的 Geometry、参数列表、共享参数数据但 API 对象就是个黑匣子你只能一遍遍加 MessageBox 把数据打出来。RevitLookup 就是来拆这个黑匣子的它能把 Revit 内部的对象模型按层级展开ElementId、Category、Geometry、Parameters 挨个看。但你真去网上搜「Lookup Revit 2020」下载下来却常常是 2019 的旧版——装完 Revit 里压根不显示命令或者点一下就报「无法加载程序集」十有八九是版本和编译环境对不上。另一个常见误解是这插件附带 addin 文件所以只要把 RevitLookup.dll 丢进 Revit 的 Addins 目录就完事了。实际上 2020 版本的 RevitLookup 源码基于 .NET Framework 4.7.2 编写引用的是 RevitAPI.dll 和 RevitAPIUI.dll必须先用 Visual Studio 2019 编译一遍再把生成的 dll 和配套 addin 放到正确位置。这篇文章就是把我自己装通 RevitLookup 2020 的完整过程记下来——从 VS 环境匹配、源码编译、引用路径处理到 addin 注册和最终验证每一步都给出具体命令和参数说明。适合刚接触 Revit 二次开发、想在 2020 上跑通 tools 的开发者也适合换电脑以后第二次装、想少踩一遍坑的老手。2. 配套环境把 VS2019 与 .NET Framework 4.8 装到能用先说一个最容易被忽略的事RevitLookup 2020 的源码项目文件是 .csproj目标框架通常在 .NET Framework 4.7.2 或 4.8。如果拿 Visual Studio 2022 直接打开 2020 年代的工程虽然能打开但经常会遇到「当前目标框架不支持」或者重新 target 后编译出一堆 API 签名错误。所以我个人的习惯是装什么 Revit 版本就用那个时代对应的主版本 VS 来编译插件。Revit 2020 对应的就是 VS201916.x编译器用 MSBuild 16。2.1 版本对应关系先看清这张表装环境之前先明确一个工程上的对应表。Revit SDK 的接口在 2020 之后虽然大方向一致但小版本之间会有 API 增删RevitLookup 这种直接反射内部结构的工具尤其敏感。如果你本机只有 VS2022装完也可以试但遇到 CS0246 或 CS1061 报错别惊讶优先回头找 VS2019。Revit 版本RevitLookup 分支Visual Studio.NET FrameworkRevit 2020revit-2020VS2019 16.x4.7.2 / 4.8Revit 2021revit-2021VS2019 16.x4.8Revit 2022revit-2022VS2022 17.x4.8网上不少「下载即用」的 RevitLookup 2020 资源实际上是 2021/2022 的源码改了个名丢出来的.csproj 里的 TargetFramework 和引用还是新版的直接编译就是一堆红色波浪线。装之前先在 VS 的解决方案资源管理器里右键项目 → 属性看一眼「目标框架」是不是 4.7.2 或 4.8。如果它写的是 .NET Core 或 .NET 5那基本可以断定不是真正的 RevitLookup 2020加载到 Revit 2020 里必崩。提示RevitLookup 本质是外部命令ExternalCommand必须走 RevitAPIUI。安装包如果只给了 addin 而没有 .csproj 源码多半是从别处二次打包的尽量选自带源码的版本。2.2 安装 Visual Studio 2019 的正确姿势VS2019 Community 是免费版够用。安装时不要去勾选一堆用不上的组件那只会拖慢装机和将来的编译速度。RevitLookup 需要的是「.NET 桌面开发」工作负载这部分包含 C# 编译器、MSBuild 和 .NET Framework 4.x 的 targeting pack。用 winget 命令安装比较省事winget install Microsoft.VisualStudio.2019.Community --override --add Microsoft.VisualStudio.Workload.ManagedDesktop --add Microsoft.VisualStudio.Component.NET.Core.3.1 --add Microsoft.Net.Component.4.8.SDK --quiet --wait这段命令的含义是先安装 VS2019 Community然后通过--override传入额外的组件参数。Workload.ManagedDesktop是「.NET 桌面开发」工作负载Microsoft.Net.Component.4.8.SDK是 .NET Framework 4.8 SDK确保编译时能把目标框架v4.8正确解析出来--quiet表示静默安装--wait让 PowerShell 等待安装完成再继续。如果不想用命令行也可以在 VS Installer 的「单个组件」搜索栏里搜4.8 SDK勾选后点安装。安装完建议重启一次机器否则 .NET Framework 的 targeting pack 有时不会立刻被 MSBuild 识别到编译时会报「找不到 .NETFramework,Versionv4.8」的 NETSDK 风格错误。2.3 确认 Revit 2020 本体和 SDK 引用Revit 2020 必须已经正常安装在机器上最好别用精简版或绿色版——RevitLookup 编译后要读取 RevitAPI.dll 和 RevitAPIUI.dll精简版经常把这两个关键 dll 裁掉了。正常安装的 Revit 2020API 程序集在这个目录C:\Program Files\Autodesk\Revit 2020\其中 RevitAPI.dll 和 RevitAPIUI.dll 就在安装根目录里而不是像旧版那样单独放在 SDK 文件夹。Revit SDK 是可选安装项如果你没有装 SDK编译时手动引用这两个 dll 即可如果装了 SDKSDK 目录下的 RevitAPI.chm 能帮你查 API 签名但编译时并不需要它。注意RevitAPI.dll 和 RevitAPIUI.dll 必须引用同一个版本目录里的文件不能一个从 2020 目录拿、一个从 2019 目录拿。程序集加载时查的是完整版本号版本不一致会直接抛FileLoadException。3. 源码编译处理引用路径生成 RevitLookup.dll环境就绪之后最难的部分来了源码编译。RevitLookup 2020 的源码目录结构不算复杂主要包含 RevitLookup.sln 解决方案、RevitLookup.csproj 项目文件、一个 RevitLookup.addin 模板以及大量用于反射展示数据的 .cs 文件。拿到这份资源后先解压到一个没有中文和空格的路径比如D:\dev\RevitLookup2020。3.1 源码目录里有什么先看清楚再动手解压后你会看到类似这样的结构RevitLookup2020/ ├── RevitLookup.sln ├── RevitLookup/ │ ├── RevitLookup.csproj │ ├── RevitLookup.addin │ ├── App.cs │ ├── Command.cs │ ├── Core/ │ │ └── Snoop.cs │ ├── Properties/ │ │ ├── Resources.Designer.cs │ │ └── AssemblyInfo.cs │ └── ... └── packages/RevitLookup.addin是注册文件里面写了命令的类名和 dll 路径App.cs和Command.cs是入口类Core/Snoop.cs是核心的反射遍历逻辑。编译前先确认一件事.csproj里的引用是不是HintPath写死了本机的 Revit 安装路径。很多源码包是从作者电脑上直接打包出来的HintPath指向C:\Program Files\Autodesk\Revit 2020\RevitAPI.dll如果 Revit 装在了其他盘编译就会失败。用文本编辑器打开RevitLookup.csproj找到类似这样的片段Reference IncludeRevitAPI HintPathC:\Program Files\Autodesk\Revit 2020\RevitAPI.dll/HintPath PrivateFalse/Private /Reference Reference IncludeRevitAPIUI HintPathC:\Program Files\Autodesk\Revit 2020\RevitAPIUI.dll/HintPath PrivateFalse/Private /ReferenceHintPath是编译时查找程序集的路径Private表示生成时是否把引用 dll 复制到输出目录。Revit 插件里的 API 引用通常设False因为运行时 Revit 自己会加载同名程序集复制过去反而可能引发版本冲突。3.2 用 VS 打开并编译首次失败是常态直接用 VS2019 双击RevitLookup.sln打开。在工具栏上把配置从 Debug 改成 Release平台建议选 AnyCPU——Revit 2020 自身是 AnyCPU插件跟随主程序加载即可没必要单独选 x64。全部就绪后先不要急着 F5 运行那是启动调试并把插件挂进 Revit容易让 VS 卡死而是用「生成 → 重新生成解决方案」msbuild RevitLookup.sln /t:Rebuild /p:ConfigurationRelease /p:PlatformAny CPU如果 VS 环境没问题这条命令会在RevitLookup\bin\Release下生成RevitLookup.dll。但绝大多数情况下第一次编译不会那么顺利。最常见的是CS0246 找不到类型或命名空间 RevitAPI这时候回看HintPath——要么你改过 Revit 的安装路径要么源文件里写的是 2019 的目录。3.3 修改引用路径两种做法对比我一般会直接动手改.csproj把HintPath改成自己机器上的实际路径。打开项目文件把上面那段里的路径替换掉即可。嫌手动改容易敲错的话也可以直接在 VS 里操作解决方案资源管理器 → 引用 → 右键 RevitAPI → 属性把「路径」改成实际位置。Reference IncludeRevitAPI HintPath$(RevitInstallDir)RevitAPI.dll/HintPath PrivateFalse/Private /Reference这里把路径写成了$(RevitInstallDir)这种变量形式是一种更可迁移的写法——你在 VS 的「生成 → 属性 → 生成事件」里可以先定义这个环境变量。不过 2020 项目文件通常没预留这个变量直接改硬路径是最稳的。改完重新编译如果还报 CS0246检查项目文件里是否同时引用了旧版 SDK 目录下的 dll比如C:\Program Files (x86)\Autodesk\Revit SDK 2020\——那个目录也有一份 RevitAPI.dll但它是纯 SDK 拷贝加载路径与你 Revit 安装根目录下的不一定一致混用会埋下运行时不匹配的隐患。提示Private设False还有一个好处——输出目录里不会出现 RevitAPI.dll 和 RevitAPIUI.dll 这两个文件之后拷贝 addin 与 dll 去别的机器时就不容易误带第三方程序集。3.4 编译产物确认看文件别只看 dll编译成功后RevitLookup\bin\Release下至少应该有这几个文件RevitLookup.dll主程序集也是 addin 里要引用的文件RevitLookup.addin注册文件项目里通常配置了「复制到输出目录」所以编译后它也会出现在这里RevitLookup.pdb调试符号文件留着以后排查插件崩溃时看调用栈用得上特别注意一点如果你的项目设置里复制到输出目录没勾选addin 文件不会出现在 bin 下需要你手动从源码目录复制一份。addin 文件内容本身不参与编译但它的位置决定 Revit 2020 能不能识别到命令这一步放在第 4 章专门讲。4. addin 注册用自带文件把插件挂到 Revit 2020编译只是生成了插件本体真正让 Revit 2020 在启动时加载插件的是.addin文件。很多人的源码明明编译成功了Revit 里却没有按钮问题就出在这一步的路径和放置位置。4.1 读懂自带 addin 文件每行都不能写错RevitLookup 2020 源码自带的RevitLookup.addin打开后大概是这样的?xml version1.0 encodingutf-8? RevitAddIns AddIn TypeCommand AssemblyC:\RevitLookup2020\RevitLookup\bin\Release\RevitLookup.dll/Assembly FullClassNameRevitLookup.Command/FullClassName AddInIdFB34D3D5-32A1-4FF2-8C9A-3C1A1E2B7A62/AddInId VendorIdRevitLookup/VendorId VendorDescriptionLookup Revit 2020 - snoop tool/VendorDescription /AddIn /RevitAddInsAssembly是插件 dll 的绝对路径FullClassName是入口类的完全限定名必须和源码里的namespace RevitLookup { class Command }严格匹配AddInId是这条命令的全局唯一标识同一个插件导出必须要有一个独立的 GUID不能和别的插件共用VendorId和VendorDescription是厂商信息不影响加载但写错也没关系唯一要保证的是前三个字段。注意FullClassName如果写错Revit 启动时不会报错但附加模块选项卡里会静默地不显示这条命令。排查时最先检查它。4.2 把 addin 放到正确位置两个层级怎么选Revit 2020 加载插件时有系统级和用户级两个位置按优先级从低到高分别是位置路径适用场景系统级C:\ProgramData\Autodesk\Revit\Addins\2020多用户共享需要管理员权限用户级%AppData%\Autodesk\Revit\Addins\2020单用户调试无需管理员权限开发调试阶段我是强烈建议放用户级目录这样不用每次改 addin 都要提权也不怕污染其他同事的 Revit。创建目录并复制文件直接在 cmd 或 PowerShell 里执行mkdir %APPDATA%\Autodesk\Revit\Addins\2020 copy /Y D:\dev\RevitLookup2020\RevitLookup\bin\Release\RevitLookup.addin %APPDATA%\Autodesk\Revit\Addins\2020\RevitLookup.addin copy /Y D:\dev\RevitLookup2020\RevitLookup\bin\Release\RevitLookup.dll %APPDATA%\Autodesk\Revit\Addins\2020\RevitLookup.dll把 dll 也一起复制过去是因为 addin 文件里如果写的是相对路径或干脆只写了文件名Revit 加载时会先去 addin 所在目录找 dll。如果你把 addin 复制到用户目录却不复制 dllRevit 会在那个目录下找不到程序集直接抛出Cannot create instance of class错误。4.3 路径还是要写绝对路径一个经验之谈我见过不少人在源码编译成功以后贪图省事把 addin 里的 Assembly 写成相对路径.\RevitLookup.dll以为放一起就能识别。Revit 的 addin 解析器对相对路径的支持很不稳定经常会因为当前工作目录不是 Addins 目录而解析失败。所以我的做法非常保守addin 里写绝对路径同时把 dll 复制到用户级 Addins 目录形成「addin 找 dlldll 就在隔壁」的双保险。如果你想在 VS 里调试时直接用 F5 启动 Revit就必须让 addin 里的路径指向编译输出目录。项目属性 → 调试 → 启动外部程序填 Revit.exe 路径然后在「生成事件 → 后期生成事件命令行」里加上一行copy /Y $(TargetDir)RevitLookup.addin %APPDATA%\Autodesk\Revit\Addins\2020\RevitLookup.addin copy /Y $(TargetDir)RevitLookup.dll %APPDATA%\Autodesk\Revit\Addins\2020\RevitLookup.dll这样每次编译完VS 自动把最新的 addin 和 dll 推到 Addins 目录F5 启动 Revit 加载的就是你的最新代码省得每次手动复制。注意$(TargetDir)是 VS 宏指代当前配置的输出目录Release 或 Debug 都适用。5. 避坑排查五个让加载失败的根源就算前面步骤全做对了RevitLookup 2020 加载失败也是常有的事。这一章把我这些年装插件遇到的典型问题整理成五条每条都按「现象 → 原因 → 解决」来写你照着顺序排查基本能覆盖九成以上的失败场景。5.1 编译报错 CS0246找不到 RevitAPI 类型现象用 VS2019 重新生成解决方案时Command.cs里所有用到Autodesk.Revit.DB的地方全部标红错误列表里全是CS0246 找不到类型或命名空间 Autodesk.Revit.DB。原因.csproj里的HintPath指向的 RevitAPI.dll 路径在你本机上不存在或者 Revit 2020 没有正确安装。我在一台装了 Revit 2021 的机器上试过直接编译 2020 源码就是这个报错因为HintPath写死的是 2020 的安装目录本机根本没有。解决先在文件管理器里确认C:\Program Files\Autodesk\Revit 2020\RevitAPI.dll是否真实存在如果存在回到.csproj把HintPath改成实际路径。同时确认你没有在项目里额外引用了其他版本的 RevitAPI两个版本并存时会导致编译签名冲突即便不报 CS0246也会报CS1703 已存在具有相同 GUID 的程序集。5.2 Revit 启动没报错但附加模块里没有 Lookup 按钮现象Revit 2020 启动完全正常没有弹窗但「附加模块」选项卡里找不到任何 Lookup 相关命令。原因插件被加载进 Revit 但没有被注册成可执行的命令。最常见的两个情形一是FullClassName写错了比如源码里是RevitLookup.Appaddin 里写的却是RevitLookup.Command二是 addin 文件没有放在 Revit 查找的目录层级里——很多新手把 addin 放到了2020目录的下一级子文件夹Revit 只扫描Addins\2020\这一层。解决打开 Revit 2020在菜单里找到「文件 → 选项 → 附加模块」看加载的应用列表里有没有 RevitLookup。如果没有打开用户级 Addins 目录检查 addin 文件是否直接躺在2020目录下而不是子目录里再对着源码确认FullClassName。我一般会直接开一个记事本把这个类名复制一遍不给手误的机会。5.3 点击按钮后弹窗Could not load file or assembly RevitAPI现象按钮出现了一点就弹出类似Could not load file or assembly RevitAPI, Version2020.0.0.0的异常对话框。原因dll 所在的输出目录里出现了一个版本不一致的 RevitAPI.dll。这种情况多发生在你改过HintPath之后又勾选了PrivateTrue编译生成时把引用 dll 复制进了输出目录Revit 运行时优先加载了插件目录下的 RevitAPI.dll而这个文件可能来自 2019 或 2021 SDK。解决删掉bin\Release目录下所有 RevitAPI*.dll把项目文件的Private设回False后重新编译。此外检查 addin 里的 Assembly 路径是否指向bin\Release如果指向的是系统盘 ProgramData 下的 Addins 目录确保那里没有残留的旧版 RevitAPI.dll。5.4 选中元素后直接闪退或卡死现象点 Lookup 命令选中某个图元后 Revit 无响应或直接崩溃事件查看器里能看到System.NullReferenceException。原因RevitLookup 通过反射递归导出对象的属性遇到某些循环引用的属性比如带ElementId的 Room 对象属性里又引用了LevelLevel 再引用回 Room时会陷入递归死循环。某些版本对 null 属性的处理也有缺陷选到一个没有可见几何的图元时get_Geometry返回 null代码没判空就继续访问。解决这是 2020 版本本身的已知缺陷没有彻底根治的补丁。我的笨办法是选中元素后不要直接点 Lookup先对元素执行一次Regenerate或修改任一参数让 Revit 内部重建对象然后立刻用 Lookup 抓取。另外养成先保存文件再点 Lookup 的习惯真崩了不至于连工程文件都丢了。这个坑在 RevitLookup 2021 里修了大半但 2020 版确实无解只能绕。5.5 换电脑后 addin 失效路径写死了现象同一份源码和 addin 从 A 电脑拷到 B 电脑Revit 里就找不到命令了。原因addin 文件里写的是 A 电脑的绝对路径比如C:\Users\zhang\source\repos\RevitLookup\bin\Release\RevitLookup.dllB 电脑的用户名和目录结构不一样路径自然失效。解决换电脑后第一件事就是打开 addin 文件把 Assembly 路径改成 B 电脑上的实际路径。如果你想一劳永逸可以考虑用相对路径但要保证 dll 始终复制到用户级 Addins 目录下并让 addin 文件和 dll 放同一个目录。我在自己机器上测试过相对路径.\RevitLookup.dll在我的环境里能识别但风险点也在第 4 章说过——Revit 的当前工作目录不稳定所以稳妥起见还是每次换机器改一次绝对路径顺手的事别懒。提示以上五条排查完如果还没解决还有一个「后悔药」级别的通用办法——把 addin 里的FullClassName从RevitLookup.Command临时改成其他类名启动 Revit 看是否报「无法创建实例」。如果报错说明 addin 解析器已经读到这个文件问题出在类名或程序集加载如果不报错说明文件根本没进入 Revit 的扫描范围回去检查目录层级。6. 验证跑通在 Revit 里用一条命令确认插件可用装完不是终点跑通才算完。我的验证流程非常简单固定三步启动 Revit 2020新建一个空白项目画一堵墙然后在墙上看 Lookup 能否完整展开。第一步打开 Revit 2020在「项目」里选择「新建 → 建筑样板」等进入主界面后手动在任一轴网上画一堵 200 厚的普通墙。画好之后选中这堵墙上方选项卡切到「附加模块」——如果插件注册成功这里会出现 RevitLookup 的命令按钮。第二步选中墙后点击 Lookup 命令。RevitLookup 的交互逻辑是先选定图元再点命令命令会弹出一个窗体左侧是对象树右侧是选中节点的属性列表。验证成功的最低标准是左侧展开Element节点后能看到Id、UniqueId、Category右侧属性面板里能看到Wall类型对应的参数。截图记录一下这个状态以后插件升级或换了机器直接对照这个基线。验证项预期结果判定标准附加模块选项卡出现按钮出现「Lookup」命令插件已注册点击按钮弹出查看窗体窗体正常展开程序集能成功实例化Element 节点显示 Id数值与状态栏一致反射遍历逻辑正常Geometry 节点可展开显示 Solid 信息底层 API 调用无异常第三步也是最实用的一步选中墙后在 Lookup 窗体的属性面板里找到Location对于墙来说是 LocationCurve右键复制这条属性的值。如果是带了曲线信息的墙LocationCurve 会显示为Autodesk.Revit.DB.Line这代表 Revit 2020 的几何内核被完整读到了。如果这一步能正常双击展开说明 RevitLookup 2020 已真正可投入调试后续抓取任何 API 对象都只是重复这个动作。从那以后我每次装完都不会急着去打开复杂的模型而是强制自己走一遍「新建项目 → 画墙 → 选中 → Lookup」这条最短链路。能跑通再往下走跑不通就先按第五节的路径排查省得后面一调试就分不清是插件问题还是模型问题。希望这套验证流程也能帮你少绕几个弯。本文还有配套的精品资源点击获取
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑