Nbench: dotnet-nbench может случайно попытаться выполнить [имя-сборки] .deps.json вместо сборки

Созданный на 22 янв. 2019  ·  5Комментарии  ·  Источник: petabridge/NBench

Возникает на узлах с .NET Core 2.2 и новее.

bug benchmark-execution netcore

Все 5 Комментарий

Есть ли на данный момент обходной путь / альтернатива?

Я попытался изменить цель проекта, но понял, что проблема действительно в интерфейсе командной строки. У меня это работает:
1) изменение версии интерфейса командной строки для этого проекта путем добавления global.json (ссылка: https://markheath.net/post/switching-between-netcore-sdk-versions)

2) Затем у меня возникла ошибка из-за отсутствия 2.1 для фреймворка, который требовал добавления этого в файл csproj в PropertyGroup:
2.1.6

3) Затем возникла ошибка о пакетах, восстановленных с другой средой выполнения, чем сборка / публикация. Исправить это было просто, чтобы снова запустить «dotnet restore» из cli.

После этого я смог запустить «dotnet nbench» против этого проекта.

Спасибо, что опубликовали подробное решение! Мы с @izavala собираемся провести еще одну серьезную модернизацию юзабилити NBench 2.0, и это будет в нашем списке для этого.

На всякий случай, если кто-то столкнется с этим, но, как и я, не могу возиться с целевыми фреймворками или global.json , другой обходной путь - использовать недокументированный флаг --fx-version {version} с dotnet nbench , Например:

fxversion=$(dotnet --list-runtimes | \
    grep Microsoft.NETCore.App | \
    awk '{ print $2 }' | \
    tail -1)

dotnet nbench --fx-version $fxversion

Или:

$fxversion = dotnet --list-runtimes | `
    select-string "Microsoft.NETCore.App" | `
    select-object -last 1 | `
    foreach-object { $data = $_ -split " "; $data[1] }

dotnet nbench --fx-version $fxversion

Причина , по которой команда не без этого является то , что бегун форматирует dotnet exec команду с fxVersion переменной, и , когда он пуст, это приводит к --fx-version --depsfile "Foo.deps.json" . Это, в свою очередь, анализируется dotnet exec как если бы --depsfile было значением для флага --fx-version , а следующий Foo.deps.json интерпретируется как файл сборки для запуска .

Оскорбительная строка: https://github.com/petabridge/NBench/blob/557f2fbca250a4a45636f5e4b41b58b8440b33f2/src/NBench.Runner.DotNetCli/Program.cs#L284

Этот патч должен исправить это, но у меня сейчас нет времени на правильное тестирование и / или запрос на перенос:

diff --git a/src/NBench.Runner.DotNetCli/Program.cs b/src/NBench.Runner.DotNetCli/Program.cs
index c45b32e..417319c 100644
--- a/src/NBench.Runner.DotNetCli/Program.cs
+++ b/src/NBench.Runner.DotNetCli/Program.cs
@@ -281,7 +281,10 @@ namespace NBench.Runner.DotNetCli
             var depsFile = targetFileNameWithoutExtension + ".deps.json";
             var runtimeConfigJson = targetFileNameWithoutExtension + ".runtimeconfig.json";

-            var args = $@"exec --fx-version {fxVersion} --depsfile ""{depsFile}"" ";
+            var args = $@"exec --depsfile ""{depsFile}"" ";
+
+            if (!string.IsNullOrWhiteSpace(fxVersion))
+                args += $"--fx-version {fxVersion} ";

             if (File.Exists(Path.Combine(workingDirectory, runtimeConfigJson)))
                 args += $@"--runtimeconfig ""{runtimeConfigJson}"" ";

Решено через NBench 2.0.0 https://github.com/petabridge/NBench/releases/tag/2.0.0 - больше не нужно dotnet nbench .

Была ли эта страница полезной?
0 / 5 - 0 рейтинги