Revit api Revit API:维护多个API版本的代码

Revit api Revit API:维护多个API版本的代码,revit-api,revit,revitpythonshell,pyrevit,Revit Api,Revit,Revitpythonshell,Pyrevit,我有一些Revit附加模块是为Revit 2019或以下版本编写的。现在,我正在尝试升级Revit 2020的工具,但API方法似乎有一些重大变化。幸运的是,其中一些是向后兼容的,因此我可以使用新的API方法更新代码,并将其用于Revit 2020和2019。但是,其中一些仅适用于Revit 2020。(ex)ImageInstance.Create(文档、视图、元素ID、ImagePlacementOptions) 在这种情况下,保持同一代码库与不同Revit版本兼容的最佳方法是什么?我可以很

我有一些Revit附加模块是为Revit 2019或以下版本编写的。现在,我正在尝试升级Revit 2020的工具,但API方法似乎有一些重大变化。幸运的是,其中一些是向后兼容的,因此我可以使用新的API方法更新代码,并将其用于Revit 2020和2019。但是,其中一些仅适用于Revit 2020。(ex)
ImageInstance.Create(文档、视图、元素ID、ImagePlacementOptions

在这种情况下,保持同一代码库与不同Revit版本兼容的最佳方法是什么?我可以很容易地想象使用If语句为每个Revit版本确定合适的API方法,但对于工具的维护似乎并不理想


任何建议都将不胜感激

自Revit 2015版以来,我一直在编写和管理加载项,并使用
if
语句确保内容向后兼容。他们还没有失去控制

值得编写一个小函数,将Revit版本作为字符串返回给
if
语句:

def revitVersion(): # returns '2020'
     return app.VersionName[-4:]
您还可以将
列表
放在一起,以帮助检查功能:

revitsWithoutBIM360 = ['2015', '2016', '2017', '2018']

if revitVersion() in revitsWithoutBIM360:
     print 'This version or Revit can't access BIM360 projects'
else:
     # your code here

这可能不是最优雅的处理方式,但对我来说很有效。

非常感谢!是的,虽然我表达了一点担忧,但你的方法显然是最直接的方法。我会试试看的!