Revit多版本代码编译

来源:互联网 发布:react.js angularjs 编辑:程序博客网 时间:2024/05/15 12:32

Revit开发,Visual Studio单份代码和解决方案生成多个版本插件设置

Revit二次开发和AutoCAD二次开发一样,都面临着一个很恶心的问题,就是多版本问题。Revit每年出新版本,API的改动虽说最近的几个版本改动不大,但总会有一些被标记为废弃。作为开发者,你也没法要求客户时刻紧跟Revit版本升级,这种情况下,一个插件就得支持好多个Revit版本。一旦有新Revit版本出现,就得有新的一份项目配置。之前我不知道有这个方法,自己用的是最笨的,每个版本都拷贝一份代码,根据不同版本的API修改对应版本的代码。但这样的问题很大,如果功能要修改,那我得修改多份代码这个就恶心了。。。最近网上看Arx文章,发现可以试试之前Arx多版本编译的方法可不可以用在Revit上,然后发现竟然可行。

下面让我们用具体的环境来说明这个方法:比如说,你现在已经有了一个插件的vs解决方案sln, 里面有个项目是针对Revit2016的设置和配置叫Exporter,对应的本地文件是Exporter.csproj文件如下图

项目结构

现在,想要让插件支持Revit2017,可以这么干:

  • 复制一份Exporter.csproj文件,改名为Exporter2017.csproj,和原先的文件放在一起,如下图:

这里写图片描述

  • 在Visual Studio中将复制后的新项目文件也添加到当前的解决方案中,你会发现新添加的Exporter2017项目下也同样有一份源码,在vs中看着是分属不同的项目,但其实他们在本地都是同一份源码文件。

这里写图片描述

  • 这样分别对不同的项目设置引用dll,分别设置.net framework版本,分别设置输出路径。最重要的,是要对不同的项目设置一个条件编译符号,这个设置可以右键对应项目属性【生成】页签下,我对Exporter2017项目设置的编译符号是_Revit2017,原先的Exporter项目设置的是_Revit2016,如图

这里写图片描述

  • 在代码中,针对版本间不同的API,我们可以使用#if, #elif#endif和我们定义好的条件编译符号来控制哪段代码在哪个项目下起作用,如下图。同时,当一个源文件同时属于两个项目时,可以通过vs上方的导航条来切换当前源码所属的上下文。

这里写图片描述

原创粉丝点击