Nbench: dotnet-nbench kann versehentlich versuchen, [assembly-name].deps.json anstelle der Assembly auszuführen

Erstellt am 22. Jan. 2019  ·  5Kommentare  ·  Quelle: petabridge/NBench

Tritt auf Knoten auf, auf denen .NET Core 2.2 und höher ausgeführt wird.

bug benchmark-execution netcore

Alle 5 Kommentare

Gibt es momentan einen Workaround/Alternative?

Ich habe versucht, das Projektziel zu ändern, habe aber festgestellt, dass das Problem wirklich an der CLI lag. Ich habe es zum Laufen gebracht von:
1) Ändern der CLI-Version für dieses Projekt durch Hinzufügen einer global.json (Ref: https://markheath.net/post/switching-between-netcore-sdk-versions )

2) Ich hatte dann einen Fehler, dass 2.1 für ein Framework nicht vorhanden war, das das Hinzufügen zur csproj-Datei in der PropertyGroup erforderte:
2.1.6

3) Hatte dann einen Fehler über Pakete, die mit einer anderen Laufzeit als build/publish wiederhergestellt wurden. Fix dafür war, "dotnet restore" erneut von der cli aus auszuführen.

Danach konnte ich "dotnet nbench" gegen dieses Projekt problemlos ausführen.

Danke für das Posten des ausführlichen Workarounds! @izavala und ich

Nur für den Fall, dass jemand darauf stößt, aber wie ich nicht mit den Zielframeworks oder global.json , ist eine andere Problemumgehung die Verwendung des undokumentierten --fx-version {version} Flags mit dotnet nbench , zum Beispiel:

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

dotnet nbench --fx-version $fxversion

Oder:

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

dotnet nbench --fx-version $fxversion

Der Grund dafür, dass der Befehl ohne dies fehlschlägt, ist, dass der Runner einen dotnet exec Befehl mit der fxVersion Variable formatiert, und wenn sie leer ist, ergibt dies --fx-version --depsfile "Foo.deps.json" . Dies wird wiederum von dotnet exec geparst, als ob --depsfile der Wert für das --fx-version Flag wäre, und das folgende Foo.deps.json wird als auszuführende Assembly-Datei interpretiert .

Die beleidigende Zeile: https://github.com/petabridge/NBench/blob/557f2fbca250a4a45636f5e4b41b58b8440b33f2/src/NBench.Runner.DotNetCli/Program.cs#L284

Dieser Patch sollte es beheben, aber ich habe gerade keine Zeit, um ordnungsgemäße Tests und / oder einen Pull-Request durchzuführen:

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}"" ";

Gelöst über NBench 2.0.0 https://github.com/petabridge/NBench/releases/tag/2.0.0 - nicht mehr dotnet nbench .

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

HIPERCUBE picture HIPERCUBE  ·  7Kommentare

GregariousJB picture GregariousJB  ·  7Kommentare

thelamb picture thelamb  ·  5Kommentare

antis81 picture antis81  ·  25Kommentare

kalebpederson picture kalebpederson  ·  6Kommentare