Revit API 插件必须使用 .NET Framework 4.8(非 .NET Core/5+),目标平台设为 x64,引用本地 Revit 安装目录下的 RevitAPI.dll,命令类需 public 实现 IExternalCommand 且含无参构造函数,.addin 清单须放对路径并指定绝对 DLL 路径。
Revit API 必须用 .NET Framework 而不是 .NET Core/5+
revit 2020–2024 所有版本的 api 都只加载 net48 或更低的 .net framework 程序集,哪怕你用 visual studio 2022 新建项目,默认选 .net 6 也会在启动时直接报 system.io.filenotfoundexception: 未能加载文件或程序集“revitapi”。
实操建议:
- 新建项目时明确选择
.NET Framework 4.8(不是.NET 6、.NET 8) - 项目属性 →
Target Framework必须是.NET Framework 4.8,且Platform Target设为x64(Revit 是纯 64 位进程) - 引用
RevitAPI.dll和RevitAPIUI.dll时,必须从对应 Revit 安装目录下复制,例如:C:\Program Files\Autodesk\Revit 2023\RevitAPI.dll,不能用 NuGet 上的假包
外部命令类必须实现 IExternalCommand 接口且带 public 无参构造函数
Revit 启动插件时会通过反射实例化你的命令类,如果类没实现 IExternalCommand,或者构造函数不是 public 且带参数,就会静默失败——菜单不显示、按钮不注册,连日志都不抛。
常见错误现象:
- 编译成功,但 Revit 中完全看不到命令(没报错,也没提示)
- 调试时断点进不去,
Execute方法压根没被调用
正确写法示例:
public class MyCommand : IExternalCommand
{
public Result Execute(ExternalCommandData commandData,
ref string message, ElementSet elements)
{
TaskDialog.Show("Hi", "It works!");
return Result.Succeeded;
}
}
注意:MyCommand 类必须是 public,不能是 internal;不能有带参构造函数;不能标记 [Obsolete] 或其他干扰反射的特性。
App.config 里不能有 unsupported runtime 版本声明
很多开发者复制了其他项目的配置,结果在 App.config 里留着 <supportedruntime version="v4.0" sku=".NETFramework,Version=v4.8"></supportedruntime> 这种旧写法,反而导致 Revit 加载失败——它自己控制运行时,不需要你声明。
实操建议:
- 直接删掉整个
<startup></startup>节点,让 Revit 自主决定加载哪个 CLR - 如果项目用了第三方库(比如 Newtonsoft.Json),确保它们也是
net48编译的,否则会触发Could not load file or assembly异常 - 调试时打开 Revit 日志(设置环境变量
ADSK_REVIT_LOGGING=1),日志路径通常在%LOCALAPPDATA%\Autodesk\Revit\Autodesk Revit 2023\Journals\,里面会有真实加载失败原因
部署时 DLL 必须放在 %APPDATA%\Autodesk\Revit\Addins\ 对应年份子目录
Revit 不读取你双击运行的 DLL,也不认项目输出路径。它只扫描特定位置的 .addin 清单文件,再按清单里的 Assembly 路径去加载实际 DLL。
关键点:
-
.addin文件是 XML,必须放在%APPDATA%\Autodesk\Revit\Addins\2023\(年份要匹配) - 内容里
<assembly></assembly>的路径必须是绝对路径,且指向你编译出的.dll(推荐用%APPDATA%变量,如:%APPDATA%\MyPlugin\MyPlugin.dll) - 不要把 DLL 放进 Revit 安装目录或 Program Files,UAC 会阻止写入,也违反 Autodesk 发布规范
一个最小可用的 MyPlugin.addin:
<?xml version="1.0" encoding="utf-8"?> <AddIn Type="Command" xmlns=""> <Name>MyPlugin</Name> <Assembly>%APPDATA%\MyPlugin\MyPlugin.dll</Assembly> <FullClassName>MyPlugin.MyCommand</FullClassName> <VisibilityMode>Always</VisibilityMode> </AddIn>
路径拼错、年份不匹配、XML 格式非法——这三类问题占部署失败的 80% 以上,比代码逻辑问题更常见。
真正卡住人的地方,往往不是 API 怎么调,而是 Revit 根本没看到你的 DLL。检查 .addin 文件位置、内容、权限,比反复改 Execute 方法有用得多。


















