在Revit二次開發中,如果只是簡單的從模型中提取數據或不需要界面對Revit進行修改,我們一般使用RevitNet。
如果對RevitNet不熟悉的,請參考:RevitAPI進階之獨立進程內讀取、寫入Revit文件.
我們接下來對使用過程中出現的問題做一下總結:
1,異常:SEHException: 外部組件發生異常。
解決方法:Revit 內核必須加 STAThread 標簽
RevitCoreContext.Instance.Run();
2,在Windows應用程序提示無法加載RevitNET.dll。
可能的原因是:目標平台為Any CPU,首先32位。
- 應該取消首先32位的對勾,或者更改為X64
- 目標框架 注意與引用的項目一致(主要針對其它dll)
3,如何跨線程訪問嗎?
將RevitNet封裝為一個控制台應用程序(Revit啟動程序),然后通過命令行去啟動Revit啟動程序。
在啟動過程可以傳入參數。
Process process=new Process();//AppDomain.CurrentDomain.BaseDirectory + process.StartInfo.FileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory ,"ExportStart.exe");//執行的exe路徑 process.StartInfo.UseShellExecute = false;//不顯示shell process.StartInfo.CreateNoWindow = true;//不創建窗口 process.StartInfo.RedirectStandardInput = true;//打開流輸入 process.StartInfo.RedirectStandardOutput = true;//打開流輸出 process.StartInfo.RedirectStandardError = true;//打開錯誤流 process.StartInfo.Arguments = "" + revitCmd + " \"" + filePathList.First() + "\"";//輸入參數,多個參數使用空間分割,如果一個參數包含空格,使用""包括此參數 process.Start();//執行 string msg = process.StandardOutput.ReadToEnd();//讀取輸出 process.WaitForExit();//等待執行完成 process.Close();//結束
4,未能加載由“RevitNET.dll”導入的過程?

解決辦法:
查看環境變量,將RevitInstallPath的path放至第一位.
其它涉及到操作多個版本Revit 的問題(這里說的是Revit文件的版本可能是2018,2019):
不啟動獲取Revit文件的版本
/// <summary> /// 獲取Revit文件的版本 /// </summary> /// <param name="path">文件路徑</param> /// <returns></returns> public static string GetRevitVision(string path) { string revitVision = null; FileStream stream = new FileStream(path, FileMode.Open); int size = 1024 * 1024; byte[] bytes = new byte[size]; while (stream.Read(bytes, 0, size) > 0) { string str = Encoding.Unicode.GetString(bytes); string pattern = @"Autodesk Revit \d{4}"; var match = Regex.Match(str, pattern); if (match.Success) { revitVision = match.Value.Substring(match.Length - 4, 4); //File.WriteAllText(@"D:\abc.txt", str); break; } } return revitVision; }
1,程序運行目錄(OutputDll)能否刪除RevitAPI.dll或RevitAPIUI.dll等相關dll?
可以,設置環境變量后,Revit會去Revit安裝目錄下查找以上dll。
注意:如果如果程序運行目錄(OutputDll)存在Revit相關的dll,版本必須正確,否則會報錯。(如果不能保證版本正確,不如將Revit相關dll全部刪除,好辦法^_^)
2,RevitNet啟動程序,能否取消RevitAddInUtility.dll的引用?
可以取消,RevitAddInUtility.dll 此dll的作用是用於獲取Revit的安裝目錄,可以手動指定Revit的安裝目錄。從而取消此dll的引用。(完全可以不安裝Revit,只復制Revit需要的dll,但區別那些dll是Revit需要的會很麻煩。不過可以將Revit安裝目錄下的文件全部復制到指定位置)
如果上面沒有寫清楚,請留言!
