Ошибка лицензии при использовании Benchmark.NET + DevArt dotConnect для PostgreSQL

Я работаю над приложением, состоящим из нескольких проектов, и использую EntityFramework с dotConnect для работы с PostgreSQL. Также у меня есть лицензия на dotConnect, которая успешно работает в основном приложении.

Параллельно я создаю консольное приложение (другое решение) с помощью Benchmark.Net для измерения производительности логики одного из проектов. Но каждый раз, когда я запускаю тест, я получаю следующую ошибку:

System.Reflection.TargetInvocationException: цель вызова сгенерировала исключение. ---> System.Data.Entity.Core.EntityException: Базовый поставщик не работает при открытии. ---> Devart.Data.PostgreSql.PgSqlException: сборка, содержащая встроенную лицензию dotConnect для PostgreSQL, не может использоваться с этим приложением: 0f238e83-669a-46b8-876f-40331880ee79.exe.exe.

Следуя этой инструкции, я уже сгенерировал licenses.licx через Visual Studio и <exe file>.licenses через lc.exe. Но все равно выдает ту же ошибку.

Я подозреваю, что тот факт, что Benchmark.NET генерирует свой собственный exe-файл для запуска теста, вызывает эту ошибку, но я не уверен на 100%. Поэтому я ищу решение, если у кого-то есть?

Спасибо


person Dmitry Senin    schedule 13.11.2018    source источник
comment
@dymanoid, как это сделать? Не могли бы вы указать мне на документацию Benchmark.NET или любой образец?   -  person Dmitry Senin    schedule 13.11.2018


Ответы (1)


Я не уверен, что создавать эталонный тест для кода, который выполняет вызовы базы данных и т. д., — это хорошая идея. Тогда вы тестируете не код, а вместо этого всю свою систему: файловая система, драйверы базы данных, возможное взаимодействие и так далее.

Это не идея BenchmarkDotNet. На самом деле он создан для сравнительного анализа относительно небольших задач, связанных с процессором, чтобы найти узкие места и выполнить оптимизацию на основе измерений.

Однако, если вы все же хотите это сделать, решение может состоять в том, чтобы запустить эталонный тест в процессе создания консольного приложения, которое вы создали, без создания специальных сборок для эталонного тестирования.

Для этого используйте атрибут [InProcess]. Просто примените его к своему эталонному классу вместо обычных атрибутов работы:

[InProcess]
public class TypeWithBenchmarks
{
    [Benchmark]
    public void BenchmarkedMethod()
    {
    }
}
person dymanoid    schedule 13.11.2018
comment
Это сработало. Большое тебе спасибо. Что касается самого бенчмарка, то, несмотря на то, что я согласен с тем, что BenchmarkDotNet предназначен для микро-бенчмаркинга, я должен подчеркнуть, что логика, которую я тестирую, довольно легковесна, и я уже нашел в ней проблему производительности с помощью BenchmarkDotNet. Так что я думаю, что пока он удовлетворяет все мои потребности - person Dmitry Senin; 13.11.2018
comment
После применения исправления я получил Unhandled Exception: System.InvalidOperationException: List of measurements contains no elements. Это ошибка BDN, которая, похоже, исправлена ​​в версии 0.11.2.849. Чтобы установить эту ночную сборку, следуйте инструкциям: benchmarkdotnet.org/articles/guides/nuget. html#ночной - person Dmitry Senin; 13.11.2018