KI-freundlicher CLI-Modus
Ab Babel Obfuscator 11.7.0 kann das Befehlszeilentool einen strukturierten, maschinenlesbaren Ausgabestrom ausgeben, der sich gut für CI-Pipelines, Buildorchestratoren und KI- und Agent-Integrationen eignet.
Die standardmäßige Textausgabe von babel.exe ist unverändert und bleibt vollständig
abwärtskompatibel: Vorhandene CI-Skripte und Kundenintegrationen müssen nicht angepasst werden.
Der KI-freundliche Modus wird über drei neue globale Flags eingeschaltet:
--format=text|json|ndjson: wählt das Format des Ausgabekanals--quiet(Alias-q): unterdrückt das Logo-Banner und bricht bei interaktiven Eingabeaufforderungen sofort mit einem Fehler ab--strict-exit: schaltet semantische Exitcodes ein
Wenn --format=json oder --format=ndjson gewählt ist, trägt stdout den
strukturierten Datenstrom, und die für Menschen lesbaren Diagnosemeldungen werden nach stderr geleitet, sodass sich die
beiden Kanäle nie vermischen.
Flags
—format <format>
Wählt das Ausgabeformat, das auf stdout verwendet wird. Zulässige Werte:
| Wert | Beschreibung |
|---|---|
text | Standard. Die bisherige, für Menschen lesbare Konsolenausgabe. Keine strukturellen Änderungen gegenüber früheren Versionen. |
json | Ein einzelner, gepufferter JSON-Umschlag, der geschrieben wird, wenn der Lauf abgeschlossen ist (oder bei --help / --version). Am besten geeignet, wenn stdout in eine Datei umgeleitet oder an einen JSON-Verbraucher weitergereicht wird. |
ndjson | Zeilengetrenntes JSON. Ein Ereignis pro Zeile, das ausgegeben wird, sobald es entsteht. Am besten geeignet für Streaming-Verbraucher, Protokollsammler und laufende Agenten, die reagieren müssen, bevor der Lauf endet. |
Beispiele:
babel myapp.exe --format=json > result.json
babel myapp.exe --format=ndjson | jq -c 'select(.level=="error")'Mit —format=json oder —format=ndjson wird das Logo-Banner
unabhängig von —logo automatisch unterdrückt, damit schon das
erste Byte auf stdout gültiges JSON ist.
—quiet (-q)
Unterdrückt das Copyright- und Logo-Banner und ändert das Verhalten interaktiver
Passwortabfragen: Statt an Console.In zu blockieren, bricht Babel sofort mit
einem ausdrücklichen Fehler ab. Dadurch ist --quiet sicher für unbeaufsichtigte Aufrufe durch
CI-Runner, Buildschritte in Containern und KI-Agenten.
babel myapp.exe --quiet --keyfile mykey.pfx --keypwd env:KEY_PWD--quiet ist unabhängig von --format: Es lässt sich mit der bisherigen
Ausgabe text kombinieren, um für Menschen lesbare Protokolle ohne das Banner zu erhalten.
—strict-exit
Schaltet für den Prozess semantische Exitcodes ein. Ohne dieses Flag behält Babel
die bisherige Vereinbarung bei, nach der 0 Erfolg und 1 jeden Fehlschlag bedeutet.
| Exitcode | Konstante | Bedeutung |
|---|---|---|
0 | success | Der Lauf wurde ohne Fehler abgeschlossen. |
10 | invalidArguments | Die Befehlszeile konnte nicht ausgewertet werden oder enthielt einen ungültigen Wert (zum Beispiel ein unbekanntes --format). |
20 | inputNotFound | Die primäre Assembly oder eine andere erforderliche Eingabedatei wurde nicht gefunden. |
30 | obfuscationFailure | Die Verschleierung ist zur Laufzeit fehlgeschlagen (jede nicht klassifizierte Ausnahme des Obfuscators). |
40 | licensingFailure | Die Lizenzprüfung ist fehlgeschlagen (fehlende, abgelaufene oder nicht berechtigte Lizenz). |
50 | keyOrSigningFailure | Die Signierung mit starkem Namen oder eine Operation mit einem kryptografischen Schlüssel ist fehlgeschlagen. |
Die Klassifizierung erscheint außerdem als exitReason im Ergebnisdatensatz
von JSON und NDJSON (siehe Ergebnisumschlag), auch wenn --strict-exit
nicht aktiv ist. So können Verbraucher die Fehlerkategorien unabhängig vom
numerischen Exitcode unterscheiden.
babel myapp.exe --strict-exit --format=json
echo "exit=$?"Schema: babel.cli.v1
Alle strukturierten Nutzdaten entsprechen dem versionierten Schema babel.cli.v1.
Innerhalb einer Hauptversion des Schemas sind additive Änderungen (neue Felder, neue Ereigniscodes,
neue Exit-Gründe) zulässig. Bei inkompatiblen Änderungen erhält das Schema einen neuen Namen.
Ereignisdatensatz
Jede Diagnosemeldung, die während eines Laufs ausgegeben wird, wird auf ein Ereignis abgebildet:
{
"ts": "2026-05-08T14:32:11.482Z",
"level": "info",
"code": "BAB1234",
"message": "Renaming phase, elapsed time 00.082s",
"data": { "phase": "renaming", "elapsedMs": 82 }
}| Feld | Typ | Hinweise |
|---|---|---|
ts | Zeichenfolge (ISO-8601, UTC) | Zeitstempel, zu dem das Ereignis erzeugt wurde. |
level | debug | info | warning | error | Schweregrad. |
code | Zeichenfolge | null | Diagnosecode von Babel (zum Beispiel BAB1234, W00013), sofern vorhanden. |
message | Zeichenfolge | Für Menschen lesbare Meldung. |
data | Objekt | null | Optionale strukturierte Nutzdaten, die dem Ereignis angehängt sind. |
Ergebnisumschlag
—format=json
Wenn der Lauf endet, wird ein einzelnes JSON-Objekt nach stdout geschrieben. Es enthält
die Zusammenfassung des Laufs und alle Ereignisse, die während des Laufs gepuffert wurden:
{
"exitCode": 0,
"exitReason": "success",
"elapsedMs": 4218,
"warnings": 1,
"errors": 0,
"events": [
{ "ts": "2026-05-08T14:32:09.500Z", "level": "info", "code": null, "message": "Babel Obfuscator 11.7.0.0", "data": null },
{ "ts": "2026-05-08T14:32:11.482Z", "level": "info", "code": "BAB1234", "message": "Renaming phase ...", "data": { "phase": "renaming" } },
{ "ts": "2026-05-08T14:32:13.012Z", "level": "warning", "code": "W00013", "message": "Could not resolve ...", "data": null }
]
}—format=ndjson
Jedes Ereignis wird in einer eigenen Zeile ausgegeben, sobald es entsteht. Nach dem
letzten Ereignis folgt eine abschließende Ergebniszeile (ohne das Array events, da
die Ereignisse bereits übertragen wurden):
{"ts":"2026-05-08T14:32:09.500Z","level":"info","code":null,"message":"Babel Obfuscator 11.7.0.0","data":null}
{"ts":"2026-05-08T14:32:11.482Z","level":"info","code":"BAB1234","message":"Renaming phase ...","data":{"phase":"renaming"}}
{"ts":"2026-05-08T14:32:13.012Z","level":"warning","code":"W00013","message":"Could not resolve ...","data":null}
{"exitCode":0,"exitReason":"success","elapsedMs":4218,"warnings":1,"errors":0}| Feld | Typ | Hinweise |
|---|---|---|
exitCode | Ganzzahl | Numerischer Exitcode, den der Prozess tatsächlich zurückgibt (bisherig oder strikt, je nach --strict-exit). |
exitReason | Zeichenfolge | Stabiles Klassifizierungstoken. Gibt immer die semantische Klasse wieder, auch ohne --strict-exit. |
elapsedMs | Ganzzahl | Tatsächlich verstrichene Gesamtdauer in Millisekunden. |
warnings | Ganzzahl | Anzahl der Ereignisse der Stufe warning. |
errors | Ganzzahl | Anzahl der Ereignisse der Stufe error. |
events | Array | null | Im Modus json vorhanden, in ndjson weggelassen (die Ereignisse werden als einzelne Zeilen übertragen). |
Maschinenlesbares —help
babel --help --format=json gibt eine vollständige Beschreibung jeder öffentlichen
Option aus. Sie eignet sich für Tools, die die Oberfläche der CLI auswerten müssen
(Shell-Vervollständigung, KI-Agenten, Dokumentationsgeneratoren):
{
"version": "11.7.0.0",
"usage": "babel.exe <primary assembly source> [<other assemblies>...] [options]",
"options": [
{
"name": "controlflow",
"aliases": ["nocontrolflow", "no-controlflow", "control-flow", "no-control-flow", "i"],
"description": "Enable ([no]disable) MSIL control flow obfuscation",
"args": null,
"argRequired": false,
"argOptional": false,
"negatable": true,
"incremental": false,
"container": "scalar",
"type": "boolean",
"group": "- Code Obfuscation -",
"details": "Use this option to alter the method control flow ..."
}
]
}Auch eine eingegrenzte Form wird unterstützt. babel --help controlflow --format=json gibt
denselben Umschlag aus, der aber nur die Option controlflow enthält (mit ihren
details, die aus dem Ressourcenpaket der Optionen aufgelöst werden).
Verborgene und interne Optionen werden nie zurückgegeben.
Maschinenlesbares —version
babel --version --format=json gibt Informationen zur Laufzeit und zur Plattform aus:
{
"product": "Babel Obfuscator",
"version": "11.7.0.0",
"fileVersion": "11.7.0.0",
"runtime": ".NET 8.0.11",
"platform": "win-x64"
}Das Feld platform verwendet unter .NET 5 und höher den RuntimeIdentifier (RID) von .NET
und auf älteren Zielen eine künstlich gebildete Zeichenfolge der Form <os>-<arch> (net472-x64,
unix-x64, …).
Abwärtskompatibilität
- Der Standardwert von
--formatisttext. Die bisherige Textausgabe, die Exitcodes und das Verhalten bleiben unverändert, wenn kein neues Flag angegeben wird. - Ohne
--strict-exitgibt der Prozess weiterhin0bei Erfolg und1bei jedem Fehlschlag zurück. Vorhandene CI-Prüfungen, die nach$?verzweigen, funktionieren weiter. --quietist unabhängig und lässt sich verwenden, ohne die strukturierte Ausgabe einzuschalten.
Die strukturierte Ausgabe steht auch über die MSBuild-Aufgabe und das NuGet-Paket Babel.Obfuscator zur Verfügung, indem Sie dieselben Flags über die üblichen Eigenschaften und Argumente übergeben.