我有一个为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在使用后“释放”它是否需要做些特别的事情?还是正常行为?
非常感谢!
答案 0 :(得分:1)
即使命令未执行,Revit也会使用所有dll,这对于可视化菜单或使命令可用于应用程序是必需的。
如果要调试代码,可以将项目调试配置为以revit.exe为目标,然后在打开revit时暂停执行以更改代码(我使用Visual Studio 2017)。
编辑 :(将VS 2017配置为在Revit中进行调试)
复制“ $(ProjectDir)*。addin”“ $(AppData)\ Autodesk \ REVIT \ Addins \ 2019” 复制“ $(ProjectDir)bin \ debug * .dll”“ $(AppData)\ Autodesk \ REVIT \ Addins \ 2019”
此命令会将adin和dll复制到revit可以找到它的文件夹中,这样您将在revit中拥有当前版本。
4.(额外的步骤),您还可以自动打开项目以使其变得更容易,请转到“调试”->“启动选项”->“命令行参数”,然后写入.rvt文件的路径。
答案 1 :(得分:1)
在评论之后,我决定是否要重新启动Revit。我在博客上写了一篇文章,解释了如何使用Revit加载项管理器来获得您想要的结果:
http://archi-lab.net/debugging-revit-add-ins/
此方法与标准调试方法之间的区别是Revit使用LoadFrom()
方法加载DLL,并在Revit.exe进程打开的同时将其锁定,同时使用外接程序管理器使用Load()
方法,该方法仅读取DLL的byte[]
,这意味着它可用。您可以在VS中重新构建解决方案,并在不关闭它的情况下在Revit中重新加载。它确实有缺点,所以请阅读这篇文章。