首页 > 解决方案 > 为什么我的 DLL 在执行后仍被 Revit 使用?

问题描述

我有一个为 Revit API 编写的小 C# 代码:

public List<string> Read_temp_file(string filename, Application app)
{
    string username = Environment.UserName;
    string myPath = "C:\\Users\\" + username + "\\AppData\\Roaming\\pyRevit\\" + app.VersionNumber + "\\";
    List<string> readlines = new List<string>();
    foreach (string file in System.IO.Directory.GetFiles(myPath, "*", SearchOption.AllDirectories))
    {
        if (file.Substring(file.Length - filename.Length,file.Length) == filename)
        {
            readlines = File.ReadLines(myPath + file).ToList();
        }
    }
    return readlines;
}

我将它构建为 DLL,然后从我的 Revit 插件中调用它,没问题。但是,如果我回到我的代码并想要重新构建,我会收到一条错误消息,指出 DLL 正在被另一个进程使用并被 Revit 阻止。为什么?

Revit 使用后是否需要做特别的事情才能“释放”它?还是这是正常行为?

非常感谢!

标签: c#revit-api

解决方案


跟进我发表的评论是否要重新启动 Revit。我在我的博客上写了一篇文章,解释了如何使用 Revit 插件管理器来实现您所追求的结果:

http://archi-lab.net/debugging-revit-add-ins/

这与标准调试方法之间的区别在于,Revit 使用该LoadFrom()方法加载 DLL,只要 Revit.exe 进程处于打开状态,就会将其锁定,而加载项管理器使用仅Load()读取byte[]DLL 这意味着它可用,您可以在 VS 中重新构建您的解决方案,并在 Revit 中重新加载而无需关闭它。它确实有明显的缺点,所以请阅读帖子。


推荐阅读