You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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类型。

具体解决步骤

  1. 修改项目目标框架

    • 右键项目 → 属性 → 应用 → 目标框架,选择与你的Revit版本匹配的.NET Framework版本:
      • Revit 2023/2024:.NET Framework 4.8
      • Revit 2022:.NET Framework 4.7.2
      • Revit 2021及更早:对应更低版本的.NET Framework(如4.6.2)
    • 确认后保存项目。
  2. 调整Revit引用设置

    • 找到项目中的RevitAPI.dll和RevitUIAPI.dll引用,设置复制本地为False,避免将Revit自带的程序集复制到输出目录引发版本冲突。
  3. 清理并重新生成项目

    • 点击Visual Studio菜单 → 生成 → 清理解决方案
    • 再选择生成解决方案,确保输出目录是对应.NET Framework的路径(比如bin\Debug\net48)。
  4. 修正.addin文件的Assembly路径

    • 将配置文件中的<Assembly>路径修改为新的输出路径,替换原有的net7.0为你选择的.NET Framework版本目录,比如net48。
  5. 优化代码(可选)

    • 代码中using static System.Net.Mime.MediaTypeNames;未被使用,可以删除,减少不必要的引用。

内容的提问来源于stack exchange,提问作者Ben Dennison

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 13:32:46