Revit 二次开发过程中,经常需要调用一些外部资源,例如图片、视频、文本文件等等,从而实现定制化的功能。对于界面图标或图片资源的使用,相对而言比较简单,具体见:Revit二次开发使用相对路径显示图片,而要在后台代码中顺利地拿到生成操作为Content的资源并不容易。可谓前有狼后有虎。
情况1:获取到的是Revit.exe的路径,而非dll路径
System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase Application.ExecutablePath Application.StartupPath
情况2:外部工具获取的是临时 dll 路径
在程序打包安装之前,通常都是通过Addin Manager来进行编程和调试,而当你知道用以下代码来获取 dll 路径时,发现并不是你想要的,因为它所指向的是一个临时生成的 dll ,而当你将程序集成到 Revit 中时,这时得到的才是你想要的路径。
Assembly.GetExecutingAssembly().Location
Addin Manager调用时对应的dll路径
PushButton调用时对应的dll路径
为了更方便地获取到资源的路径,将所有资源打包到Resources文件夹中并与 dll 置于同一路径下,此时资源文件的路径如下:
资源文件夹
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + @"\Resources\Factor.xml"