检查编译时是否存在引用

时间:2013-11-04 22:40:42

标签: c# compiler-construction reference

是否可以在C#编译时检查项目中是否存在引用?

例如;

public void myMethod()
{
    #if REVIT_DLL_2014
       TopographySurface.Create(vertices); // This function only exists in Revit2014.dll
       // So I will get a compiler if another DLL is used 
       // ie, Revit2013.dll, because this method (Create) wont exist
    #else // using Revit2013.dll
       // use alternate method to create a surface
    #endif
}

我想避免的是要维护2个独立的C#项目(即版本2013和版本2014),因为它们几乎在所有方面都是相同的,除了1个功能。

我想我的最后一招可能是(但如果以上功能可能会更好):

#define USING_REVIT_2014

public void myMethod()
{
    #if USING_REVIT_2014
       TopographySurface.Create(vertices); // This function only exists in Revit2014.dll
       // So I will get a compiler if another DLL is used because this method (Create) wont exist
    #else // using Revit2013.dll
       // use alternate method to create a surface
    #endif
}

2 个答案:

答案 0 :(得分:4)

在运行时而不是编译时进行检测。

if (Type.GetType("Full.Name.Space.To.TopographySurface") != null) {
    TopographySurface.Create(vertices);
}
else {
    // use alternate method to create a surface
}

这假设只要定义了TopographySurface,就会存在Create

答案 1 :(得分:0)

我依赖于您是否使用后期绑定或早期绑定。 后期绑定: - 不编译时间警告/错误 - 仅运行时错误

早期招标: - 编译器错误 -runtime错误