C# 为什么执行后Revit仍在使用我的DLL?
我有一个为Revit API编写的小C#代码:C# 为什么执行后Revit仍在使用我的DLL?,c#,revit-api,C#,Revit Api,我有一个为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 + "\\"
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;
}
公共列表读取临时文件(字符串文件名,应用程序应用程序)
{
字符串username=Environment.username;
string myPath=“C:\\Users\\”+username+“\\AppData\\Roaming\\pyrovit\\”+app.VersionNumber+“\\”;
List readlines=新列表();
foreach(System.IO.Directory.GetFiles(myPath,“*”,SearchOption.AllDirectories)中的字符串文件)
{
if(file.Substring(file.Length-filename.Length,file.Length)==filename)
{
readlines=File.readlines(myPath+File).ToList();
}
}
返回读线;
}
我将其构建为DLL,然后从Revit中的插件调用它,没问题。但是,如果我返回代码并希望重新构建,我会收到一条错误消息,指出DLL正在被另一个进程使用,并被Revit阻止。为什么?
Revit在使用后是否需要执行特殊操作才能“释放”它?还是正常的行为
非常感谢 Revit使用所有DLL,即使在命令未执行时,也需要可视化菜单或使应用程序可以访问命令 如果要调试代码,可以将项目调试配置为目标revit.exe,然后在revit打开时暂停执行以更改代码(我使用Visual Studio 2017) 编辑:(将VS 2017配置为在revit中调试)
4.(额外步骤)您还可以自动打开项目以使其更容易,转到“调试->启动选项->命令行参数”并写入.rvt文件的路径。Revit使用所有DLL,即使在命令未执行的情况下,这也是可视化菜单或使应用程序可以访问命令所必需的 如果要调试代码,可以将项目调试配置为目标revit.exe,然后在revit打开时暂停执行以更改代码(我使用Visual Studio 2017) 编辑:(将VS 2017配置为在revit中调试)
4.(额外步骤)您还可以自动打开项目以使其更简单,请转到“调试”->“启动选项”->“命令行参数”并写入.rvt文件的路径。跟进我对是否重新启动Revit所做的评论。我在我的博客上写了一篇文章,解释了如何使用Revit附加模块管理器来实现您想要的结果:
这与标准调试方法的区别在于,Revit使用
LoadFrom()
方法加载DLL,并在Revit.exe进程处于打开状态时将其锁定,而加载项管理器使用Load()
方法,该方法仅读取DLL的字节[]
,这意味着其可用,您可以在VS中重新构建解决方案,并在Revit中重新加载,而无需关闭它。它显然有缺点,所以请阅读这篇文章 跟进我对您是否重新启动Revit的评论。我在我的博客上写了一篇文章,解释了如何使用Revit附加模块管理器来实现您想要的结果:
这与标准调试方法的区别在于,Revit使用
LoadFrom()
方法加载DLL,并在Revit.exe进程处于打开状态时将其锁定,而加载项管理器使用Load()
方法,该方法仅读取DLL的字节[]
,这意味着其可用,您可以在VS中重新构建解决方案,并在Revit中重新加载,而无需关闭它。它显然有缺点,所以请阅读这篇文章 尝试重建Revit时,它是否仍处于打开状态?是。因此,现在我重新启动它,但我想知道是否有其他替代方法..?在尝试重建Revit时,Revit是否仍处于打开状态?是的。所以现在我重新启动它,但我想知道是否有其他选择….?非常感谢。我不太清楚我在做什么,所以你能确认一下吗?在我的VS(2017)项目中,我添加了一个新文件Revit.exe。然后我右键单击它并“启动新实例”。之后,我看到有一个“暂停”和一个“停止”图标,但如果我点击“暂停”,我仍然无法修改代码(弹出窗口告诉我我不能修改)。我做错了什么?谢谢谢谢。我不太清楚我在做什么,所以你能确认一下吗?在我的VS(2017)项目中,我添加了一个新文件Revit.exe。然后我右键单击它并“启动新实例”。之后,我看到有一个“暂停”和一个“停止”图标,但如果我点击“暂停”,我仍然无法修改代码(弹出窗口告诉我我不能修改)。我在做什么