2

是否可以在 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
}
4

2 回答 2

4

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

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

这假定只要TopographySurface定义了则Create存在。

于 2013-11-04T23:05:42.797 回答
0

我取决于您是使用延迟投标还是提前投标。后期绑定:-没有编译时警告/错误-只有运行时错误

提前出价:-编译器错误-运行时错误

于 2013-11-04T22:54:21.247 回答