我正在开发一个由多个项目组成的应用程序,并将EntityFramework与dotConnect结合使用以针对PostgreSQL运行。我还拥有dotConnect的许可证,该许可证可在主应用程序中成功运行。
与此同时,我正在使用Benchmark.Net设计一个控制台应用程序(一种不同的解决方案),以测量项目之一的逻辑性能。但是每次运行基准测试时,都会出现以下错误:
System.Reflection.TargetInvocationException:调用的目标引发了异常。 ---> System.Data.Entity.Core.EntityException:基础提供程序在打开时失败。 ---> Devart.Data.PostgreSql.PgSqlException:包含用于PostgreSQL许可证的嵌入式dotConnect的程序集不能与此应用程序一起使用:0f238e83-669a-46b8-876f-40331880ee79.exe.exe。
在this instruction之后,我已经通过Visual Studio生成了licenses.licx
,并通过<exe file>.licenses
生成了lc.exe
。但是它仍然产生相同的错误。
我怀疑Benchmark.NET会生成自己的exe来运行基准测试这一事实会导致此错误,但是我不确定100%正确。所以我在寻找一种解决方案,如果有人有?
谢谢
答案 0 :(得分:2)
我不确定为执行数据库调用等的代码创建基准是一个好主意。那么,您基准的不是基准的 code ,而是基准的整个系统而是:文件系统,数据库驱动程序,可能的互操作内容等。
这不是BenchmarkDotNet的想法。它实际上是为基准测试较小的CPU任务而创建的,以发现瓶颈并根据测量结果进行优化。
但是,如果仍然要这样做,一个解决方案可能是在创建的控制台应用程序的过程中运行基准测试,而无需生成特殊的基准测试程序集。
为此,请使用[InProcess]
属性。只需将其应用于基准类,而不是通常的工作属性即可:
[InProcess]
public class TypeWithBenchmarks
{
[Benchmark]
public void BenchmarkedMethod()
{
}
}