最近在我的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()'。
有谁知道问题出在哪里?
答案 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>