Revit插件加载报错:无法加载System.IO.Directory类型问题求助
Revit插件加载报错:无法从System.Runtime程序集加载System.IO.Directory类型
我开发了一款将Revit文档中ViewSchedule内容导出为TXT格式的插件,使用Visual Studio 2022开发。启动Revit测试时出现报错:
'Could not load type "System.IO.Directory" from assembly "System.Runtime, Version=4.0.0.0"'
已添加RevitAPI和RevitUIAPI引用,但注释导出函数后问题仍存在,推测是构建编译相关问题。
插件代码
using Autodesk.Revit.Attributes; using Autodesk.Revit.DB; using Autodesk.Revit.UI; using System.IO; using static System.Net.Mime.MediaTypeNames; namespace RevitExportImportSchedule { [TransactionAttribute(TransactionMode.Manual)] public class Class1 : IExternalCommand { public string Export(Document doc, string export_folder_name, string extension) { FilteredElementCollector col = new FilteredElementCollector(doc).OfClass(typeof(ViewSchedule)); ViewScheduleExportOptions opt = new ViewScheduleExportOptions(); var output = "Exported Files:\n"; try { foreach (ViewSchedule vs in col) { Directory.CreateDirectory(export_folder_name); vs.Export(export_folder_name, vs.Name + "_Schedule" + extension, opt); output += export_folder_name + vs.Name + "_Schedule" + extension + "\n"; } return output; } catch(Exception e) { output += e; return output; } } public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { var export_folder = "C:\\Users\\BEN.DENNISON\\Documents\\revit_open_auto"; var extension = ".txt"; UIApplication uiapp = commandData.Application; UIDocument uidoc = uiapp.ActiveUIDocument; Document doc = uidoc.Document; var output = Export(doc, export_folder, extension); TaskDialog.Show("Export", output); return Result.Succeeded; } } }
.addin配置文件
<RevitAddIns> <AddIn Type="Command"> <Name>RevitImportExport</Name> <FullClassName>RevitExportImportSchedule.Class1</FullClassName> <Text>Import/Export</Text> <Description>Exports/Imports all Schedules present in a revit project</Description> <VisibilityMode>AlwaysVisible</VisibilityMode> <Assembly>C:\Users\BEN.DENNISON\source\repos\RevitScheduleImportExport\RevitScheduleImportExport\bin\Debug\net7.0\RevitScheduleImportExport.dll</Assembly> <AddInId>239BD853-36E4-461f-9171-C5ACEDA4E723</AddInId> <VendorId>COMPANY</VendorId> <VendorDescription>COMPANY</VendorDescription> </AddIn> </RevitAddIns>
排查与解决方法
核心问题
报错的根本原因是项目目标框架不兼容:Revit基于.NET Framework运行,而当前项目使用的是.NET 7.0(属于.NET Core系列),两者程序集加载机制不同,导致无法找到System.IO.Directory类型。
具体解决步骤
修改项目目标框架
- 右键项目 → 属性 → 应用 → 目标框架,选择与你的Revit版本匹配的.NET Framework版本:
- Revit 2023/2024:.NET Framework 4.8
- Revit 2022:.NET Framework 4.7.2
- Revit 2021及更早:对应更低版本的.NET Framework(如4.6.2)
- 确认后保存项目。
- 右键项目 → 属性 → 应用 → 目标框架,选择与你的Revit版本匹配的.NET Framework版本:
调整Revit引用设置
- 找到项目中的RevitAPI.dll和RevitUIAPI.dll引用,设置复制本地为
False,避免将Revit自带的程序集复制到输出目录引发版本冲突。
- 找到项目中的RevitAPI.dll和RevitUIAPI.dll引用,设置复制本地为
清理并重新生成项目
- 点击Visual Studio菜单 → 生成 → 清理解决方案
- 再选择生成解决方案,确保输出目录是对应.NET Framework的路径(比如
bin\Debug\net48)。
修正.addin文件的Assembly路径
- 将配置文件中的
<Assembly>路径修改为新的输出路径,替换原有的net7.0为你选择的.NET Framework版本目录,比如net48。
- 将配置文件中的
优化代码(可选)
- 代码中
using static System.Net.Mime.MediaTypeNames;未被使用,可以删除,减少不必要的引用。
- 代码中
内容的提问来源于stack exchange,提问作者Ben Dennison
相关产品推荐
相关产品推荐

