C# System.MissingMethodException

C# System.MissingMethodException

提问人:Ludovic Wagner 提问时间:11/15/2023 更新时间:11/15/2023 访问量:35

问:

我实现了一些扩展方法,这些方法已经运行了一段时间。Excel.Range

以下仍然有效(我指定了 Range with,因为命名空间中也存在):using Excel = Microsoft.Office.Interop.Excel;RangeSystem

public static T Get<T>(this Excel.Range range)
{
    var value = range.Value;

    if (range.Value is null)
    {
        return default;
    }

    try
    {
        return (T)value;
    }
    catch (Exception ex)
    {
        throw new Exception($"Unable to convert {range.Value.GetType()} to {typeof(T)}!", ex);
    }
}

但这会导致在执行期间(而不是编译)出现问题:

public static T? GetNullable<T>(this Excel.Range range) where T : struct
{
    if (range is null)
    {
        return null;
    }

    var value = range.Value;

    if (value is null)
    {
        return null;
    }

    if (value.ToString() == string.Empty)
    {
        return null;
    }

    return (T)value;
}

我在 XUnit 测试中遇到以下错误:rg.GetNullable<int>()

消息: System.MissingMethodException:未找到方法:'System.Nullable'1<!!0>

Interop.Library.Helpers.RangeExtensionMethods.GetNullable(Microsoft.Office.Interop.Excel.Range)'。

堆栈跟踪:

RangeExtensionMethods.GetNullable_NullInt_ReturnsNull()

RuntimeMethodHandle.InvokeMethod(对象目标, Void** 参数, 签名签名, 布尔值 isConstructor)

MethodBaseInvoker.InvokeWithNoArgs(对象 obj, BindingFlags invokeAttr)

有谁知道是什么原因导致了这个问题?我清理代码并重建了几次,这已经运行了一段时间。

c# 互操作 扩展方法 MissingMethodException

评论

1赞 Guru Stron 11/15/2023
看起来像库版本不匹配。
0赞 Renat 11/15/2023
这个问题的答案会有帮助吗?stackoverflow.com/questions/8058832/......

答:

0赞 Ludovic Wagner 11/15/2023 #1

我刚刚从头开始测试了一个基本的控制台应用程序。如果我将该方法包含在控制台项目中,它工作正常,但是如果我将其移动到单独的类库(从头开始的极简主义),它也会失败。GetNullable<T>()

现在,我想知道昨天在将数据从Excel(传输到SQLServer)时是否没有发生错误。我有几张表,我对第一张表没有问题,但当时有一些我不理解的错误。

我在处理数据访问(CRUD 方法)的库中做了同样的事情(复制扩展方法),似乎一切都传输得很好。

当我有更多时间时,我会看看其他讨论。

PS:我检查了我从所有项目属性中删除。<Nullable>enable</Nullable>