c# - 为什么我的 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 使用后是否需要做特别的事情才能“释放”它?还是这是正常行为?
非常感谢!
解决方案
跟进我发表的评论是否要重新启动 Revit。我在我的博客上写了一篇文章,解释了如何使用 Revit 插件管理器来实现您所追求的结果:
http://archi-lab.net/debugging-revit-add-ins/
这与标准调试方法之间的区别在于,Revit 使用该LoadFrom()
方法加载 DLL,只要 Revit.exe 进程处于打开状态,就会将其锁定,而加载项管理器使用仅Load()
读取byte[]
DLL 这意味着它可用,您可以在 VS 中重新构建您的解决方案,并在 Revit 中重新加载而无需关闭它。它确实有明显的缺点,所以请阅读帖子。
推荐阅读
- android - 检测安装在真实设备中的 Android 应用程序?
- rest - Keycloak 管理员用户创建
- node.js - 如何仅捕获用户修改的字段
- doctrine-orm - 添加项目时如何检查记录是否存在的学说
- arangodb - Arangodb 使用 Java API:创建图形时是否需要定义所有边?
- ssh - 在 Cygwin 上运行 Ansible sudo(“以 root 身份”)
- excel - EXCEL 或 CALC 问题:如何设置单元格中的最大字符数并在达到最大字符数时自动跳过 2 行?
- javascript - 在哪里可以定义函数
- node.js - FFMPEG 只做一次 HTTP 范围请求(HTML5 MediaStream/WebM)
- progress-bar - Vaadin 8:如何在长时间加载导航到其他视图之前显示 ProgressBar 窗口