C# System.MissingMethodException

问题描述 投票:0回答:1

我实现了一些

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

下面的仍然有效(我用

using Excel = Microsoft.Office.Interop.Excel;
指定 Range,因为
Range
也存在于
System
命名空间中):

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

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

堆栈跟踪: 

RangeExtensionMethods.GetNullable_NullInt_ReturnsNull()

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

MethodBaseInvoker.InvokeWithNoArgs(对象 obj,BindingFlags invokeAttr)

有人知道导致该问题的原因吗?我清理了代码并重建了几次,这已经工作了一段时间了。

c# interop extension-methods missingmethodexception
1个回答
0
投票

我刚刚从头开始使用基本的控制台应用程序进行了测试。如果我在控制台项目中包含

GetNullable<T>()
方法,它可以正常工作,但如果我将它移动到一个单独的类库(从头开始极简),它也会失败。

现在,我想知道昨天我从 Excel 传输数据(到 SQLServer)时是否发生了该错误。我有几个表,第一个表没有问题,但后来出现了一些我不明白的错误。

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

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

PS:我检查了是否从所有项目属性中删除了

<Nullable>enable</Nullable>

© www.soinside.com 2019 - 2024. All rights reserved.