【问题标题】:Create Pre Processor Directive based on conditional statement in C#基于 C# 中的条件语句创建预处理器指令
【发布时间】:2021-10-01 05:07:10
【问题描述】:

我在 .NET Framework 中工作并使用 C#。我正在引用外部 dll。仅当 dll 版本为 12 或更高版本时才可用的一种特定方法。有没有办法根据 dll 的版本来条件代码编译。

我可以获取 dll 的版本,但如果是 11 或更低版本,我如何限制一段代码编译。

下面是我目前正在使用的代码,当我引用 11 或更低版本的 dll 时,GetUnsortedFaces() 显示错误,它不会让我编译。

List<IVctFace> IVctEdge.AllFaces()
    {
        Face[] faces;
        Version version = System.Reflection.Assembly.GetAssembly(typeof(Edge)).GetName().Version;

        faces = this.Edge.GetFaces();

        if (version.Major > 11)
        {
            faces = this.Edge.GetUnsortedFaces();
        }
        List<IVctFace> vctFaces = new List<IVctFace>();
        foreach (Face face in faces)
        {
            vctFaces.Add(new VctFace(face, this.Parent.Parent));
        }
        return vctFaces;
    }

我确实知道#define,但它们需要在命名空间之外创建。

【问题讨论】:

标签: c# .net


【解决方案1】:

我有一个建议:声明一个动态变量来引用 Edge 对象(见https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/types/using-type-dynamic) 然后,您可以在 try..catch 序列中调用 GetUnsortedFaces 函数,或使用反射来测试 GetUnsortedFaces 函数是否由 Edge 对象实现,然后再调用该函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    • 2010-11-21
    • 1970-01-01
    • 2023-03-05
    相关资源
    最近更新 更多