C#按符号的不同方法代码
我遇到的情况是,方法代码实现取决于所选的VisualStudio解决方案配置 每个配置都针对一个不同的外部DLL,该DLL提供不同的API版本,以便我区分它们。这些DLL适用于Autodesk Revit API,如果这些信息有帮助的话 正如您所想,每个API版本虽然非常相似,但它们之间可能存在细微的差异,这迫使我根据目标版本使用不同的代码 我已经为每个配置定义了不同的符号(C#按符号的不同方法代码,c#,conditional,overriding,solution,conditional-attribute,C#,Conditional,Overriding,Solution,Conditional Attribute,我遇到的情况是,方法代码实现取决于所选的VisualStudio解决方案配置 每个配置都针对一个不同的外部DLL,该DLL提供不同的API版本,以便我区分它们。这些DLL适用于Autodesk Revit API,如果这些信息有帮助的话 正如您所想,每个API版本虽然非常相似,但它们之间可能存在细微的差异,这迫使我根据目标版本使用不同的代码 我已经为每个配置定义了不同的符号(REVIT_2014,REVIT_2015,等等),我知道我可以依赖良好的旧#ifdef指令,但首先我想探索是否有更优雅的
REVIT_2014
,REVIT_2015
,等等),我知道我可以依赖良好的旧#ifdef
指令,但首先我想探索是否有更优雅的解决方案
我已经阅读了有关ConditionalAttribute
的内容,但我无法以我想要的方式使用它,即:
class Test
{
[Conditional("REVIT_2015")]
bool TestMethod
{
//Revit 2015 specific code
}
[Conditional("REVIT_2016")]
bool TestMethod
{
//Revit 2016 specific code
}
}
AsConditionalAttribute
不允许重写方法,也不允许方法返回值
在我开始用丑陋的#ifdef
指令来折磨我的代码之前,还有其他解决方案吗
提前感谢。如果您采用这种实际配置,效果肯定会更好。类似于一个设置,您可以在运行时读回该设置以决定要执行的操作。因此,一个二进制文件可以处理任何版本的Revit,而您无需构建正确的库并确保它与计算机匹配。或者在运行时直接读取Revit版本,因此根本不需要配置。@HansPassant如果我选择使用您的建议,我将如何处理从同一二进制文件链接到不同DLL的问题?我的意思是,2017年API可能有2016年API中不可用的方法,我还必须考虑弃用和过时的方法以及特定API版本后不再存在的方法。