使用Miniprofiler.Windows的System.MissingMethodException

时间:2014-08-05 05:16:29

标签: c# winforms entity-framework mvc-mini-profiler

最近在我的WinForm项目中,我安装了MiniProfiler.Windows并为我的QueryHandler编写了以下装饰器(我正在使用CQRS):

public class MiniProfilerQueryHandlerDecorator<TQuery,TResult>:IQueryHandler<TQuery,TResult> where TQuery : IQueryParameter<TResult>
{
    private readonly IQueryHandler<TQuery, TResult> _decoratee;

    public MiniProfilerQueryHandlerDecorator(IQueryHandler<TQuery, TResult> decoratee)
    {
        _decoratee = decoratee;
    }

    public TResult Handle(TQuery request)
    {
        TResult result;
        using (StackExchange.Profiling.MiniProfiler.Current.Step("Call QueryHandler"))
        {
            result =_decoratee.Handle(request); //call some Linq to entity queries
        }
        var friendlyString = ConsoleProfiling.StopAndGetConsoleFriendlyOutputStringWithSqlTimings();
        Debug.WriteLine(friendlyString);
        return result;
    }
}

我在var friendlyString=ConsoleProfiling.StopAndGetConsoleFriendlyOutputStringWithSqlTimings()收到以下错误  线。

  

IASCo.Application.Core.dll中出现未处理的“System.MissingMethodException”类型异常

     

其他信息:找不到方法:'Boolean StackExchange.Profiling.MiniProfiler.get_HasSqlTimings()'。

有谁知道问题出在哪里?

1 个答案:

答案 0 :(得分:1)

MissingMethodException =尝试动态访问未被其强名称(msdn)引用的程序集的已删除或重命名方法。

或者this answer表示:

  

这是一个问题,当旧版本的DLL仍然在某处停留时会发生

我注意到MiniProfiler.Windows库使用的是一个非常古老的(超过2年)版本的MiniProfiler。 That version代码确实具有MiniProfiler.HasSqlTimings属性。但是,当前版本(3.0.11)不再具有此属性。

我猜您正在使用上面链接的MiniProfiler.Windows库中的代码,但是您使用的是v3 MiniProfiler dll(而不是使用已保存在/packages中的v2 MiniProfiler dll)也许从nuget下载)。这可以解释你得到的例外情况。

如果确实如此,那么您可以通过下载版本2.0.2 nuget(Install-Package MiniProfiler -Version 2.0.2)或升级ConsoleProfiling中的代码以与MiniProfiler v3兼容来解决此问题。< / p>