原文:Supporting multiple AutoCAD versions - conditional compilation in C#
有人问通过电子邮件如何获取上周发布的导入块的代码,然后在昨天的博文中讨论了如何在AutoCAD 2006中工作。我一直在使用AutoCAD 2007本,但为使它能在2007上工作只需要做很少的改动。
有人问通过电子邮件如何获取上周发布的导入块的代码,然后在昨天的博文中讨论了如何在AutoCAD 2006中工作。我一直在使用AutoCAD 2007本,但为使它能在2007上工作只需要做很少的改动。
首先,你需要确保你引用到项目中的acmgd.dll和acdbmgd.dll是正确的版本(可以安装的AutoCAD的版本的路径来区分它们)
其次,你需要稍微修改您的代码,如wblockcloneobjects()从2006到2007的时候改变了它的签名。下面的代码段显示了如何使用预处理器指令执行C#的条件编译。你只需要在你的项目设置中设置AC2006或AC2007作为“条件编译符号”:
#if AC2006
mapping = sourceDb.WblockCloneObjects(blockIds,
destDb.BlockTableId,
DuplicateRecordCloning.Replace,
false);
#elif AC2007
sourceDb.WblockCloneObjects(blockIds,
destDb.BlockTableId,
mapping,
DuplicateRecordCloning.Replace,
false);
#endif
在上述代码中你可能会使用#else而不是#elif,仅仅只是因为因为这会使你的代码更加适应未来的更改:它会自动支持新版本而不需要特别添加代码用以检查他们。
另一方面,你可以指定一整个方法只在特定的版本上编译。首先,你需要导入System.Diagnostics命名空间。
然后你可以使用条件属性来声明一个特定的方法(在这里是一个命令)为一个特定版本的AutoCAD(如果你愿意,你也可以通过条件预处理器的DEBUG符号指定一个Debug-only命令):
namespace BlockImport
{
public class BlockImportClass
{
[Conditional("AC2007"),CommandMethod("IB")]
public void ImportBlock()
{
...