Gapotchenko.FX.Diagnostics.CommandLine
2024.1.3
Prefix Reserved
dotnet add package Gapotchenko.FX.Diagnostics.CommandLine --version 2024.1.3
NuGet\Install-Package Gapotchenko.FX.Diagnostics.CommandLine -Version 2024.1.3
<PackageReference Include="Gapotchenko.FX.Diagnostics.CommandLine" Version="2024.1.3" />
paket add Gapotchenko.FX.Diagnostics.CommandLine --version 2024.1.3
#r "nuget: Gapotchenko.FX.Diagnostics.CommandLine, 2024.1.3"
// Install Gapotchenko.FX.Diagnostics.CommandLine as a Cake Addin #addin nuget:?package=Gapotchenko.FX.Diagnostics.CommandLine&version=2024.1.3 // Install Gapotchenko.FX.Diagnostics.CommandLine as a Cake Tool #tool nuget:?package=Gapotchenko.FX.Diagnostics.CommandLine&version=2024.1.3
Overview
The module provides primitives for command line manipulation.
CommandLineBuilder
CommandLineBuilder
class allows you to dynamically build a command line.
It provides the built-in support for characters than need escaping.
Semantically CommandLineBuilder
is similar to StringBuilder
class:
using Gapotchenko.FX.Diagnostics;
var clb = new CommandLineBuilder();
clb.AppendParameter("/b");
clb.AppendFileName(@"C:\Temp\Test 1.txt");
clb.AppendFileName(@"C:\Temp\Test 2.txt");
Console.WriteLine(clb.ToString());
The code above produces the following output:
/b "C:\Temp\Test 1.txt" "C:\Temp\Test 2.txt"
Note how some command-line parameters were automatically quoted because they contained whitespace characters.
CommandLineBuilder
supports a fluent interface, just like conventional StringBuilder
.
So the code can be rewritten as:
var clb = new CommandLineBuilder()
.AppendParameter("/b")
.AppendFileName(@"C:\Temp\Test 1.txt")
.AppendFileName(@"C:\Temp\Test 2.txt");
Console.WriteLine(clb.ToString());
The resulting command line can be used in various places, most notably for starting a new process:
using System.Diagnostics;
Process.Start("copy", clb.ToString());
CommandLine
CommandLine
static class provides operations for command line manipulation.
Build
CommandLine.Build
method allows you to quickly build a command-line string from a specified list of arguments.
Basically, this is a shortcut to CommandLineBuilder
class in a handy functional form:
string commandLine = CommandLine.Build("/b", @"C:\Temp\Test 1.txt", @"C:\Temp\Test 2.txt");
Such a form is very useful in something like this:
Process.Start(
"cmd",
CommandLine.Build(
"/C", "copy",
"/b", @"C:\Temp\Test 1.txt", @"C:\Temp\Test 2.txt"));
Another cool thing: if you want to exclude some arguments from the command line then you can just make them null
:
// 'mode' will have a non-null value if there is a need to specify it.
string? mode = binary ? "/b" : null;
string commandLine = CommandLine.Build(mode, @"C:\Temp\Test 1.txt", @"C:\Temp\Test 2.txt");
Console.WriteLine(commandLine);
The code above produces the following outputs depending on the value of binary
flag:
"C:\Temp\Test 1.txt" "C:\Temp\Test 2.txt"
/b "C:\Temp\Test 1.txt" "C:\Temp\Test 2.txt"
This is a neat departure from a traditional .NET convention where it always throws ArgumentNullException
.
Instead, Gapotchenko.FX uses a slightly different philosophy.
It does the best job possible under existing conditions by following common-sense expectations.
Split
CommandLine.Split
provides the inverse operation to CommandLine.Build
.
It allows you to split a command-line string into a list of arguments using the rules of the host operating system:
using Gapotchenko.FX.Diagnostics;
string commandLine = "/b \"C:\\Temp\\Test 1.txt\" \"C:\\Temp\\Test 2.txt\"";
foreach (string arg in CommandLine.Split(commandLine))
Console.WriteLine(arg);
The code above produces the following output:
/b
C:\Temp\Test 1.txt
C:\Temp\Test 2.txt
Commonly Used Types
Gapotchenko.FX.Diagnostics.CommandLine
Gapotchenko.FX.Diagnostics.CommandLineBuilder
Other Modules
Let's continue with a look at some other modules provided by Gapotchenko.FX:
- Gapotchenko.FX
- Gapotchenko.FX.AppModel.Information
- Gapotchenko.FX.Collections
- Gapotchenko.FX.Console
- Gapotchenko.FX.Data
- Gapotchenko.FX.Diagnostics
- Gapotchenko.FX.IO
- Gapotchenko.FX.Linq
- Gapotchenko.FX.Math
- Gapotchenko.FX.Memory
- Gapotchenko.FX.Security.Cryptography
- Gapotchenko.FX.Text
- Gapotchenko.FX.Threading
- Gapotchenko.FX.Tuples
Or look at the full list of modules.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 is compatible. net5.0-windows was computed. net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 is compatible. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 is compatible. netcoreapp2.2 was computed. netcoreapp3.0 is compatible. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 is compatible. |
.NET Framework | net461 is compatible. net462 was computed. net463 was computed. net47 was computed. net471 is compatible. net472 is compatible. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETCoreApp 2.1
- Gapotchenko.FX (>= 2024.1.3)
- Gapotchenko.FX.Text (>= 2024.1.3)
-
.NETCoreApp 3.0
- Gapotchenko.FX (>= 2024.1.3)
- Gapotchenko.FX.Text (>= 2024.1.3)
-
.NETFramework 4.6.1
- Gapotchenko.FX (>= 2024.1.3)
- Gapotchenko.FX.Text (>= 2024.1.3)
-
.NETFramework 4.7.1
- Gapotchenko.FX (>= 2024.1.3)
- Gapotchenko.FX.Text (>= 2024.1.3)
-
.NETFramework 4.7.2
- Gapotchenko.FX (>= 2024.1.3)
- Gapotchenko.FX.Text (>= 2024.1.3)
-
.NETStandard 2.0
- Gapotchenko.FX (>= 2024.1.3)
- Gapotchenko.FX.Text (>= 2024.1.3)
-
.NETStandard 2.1
- Gapotchenko.FX (>= 2024.1.3)
- Gapotchenko.FX.Text (>= 2024.1.3)
-
net5.0
- Gapotchenko.FX (>= 2024.1.3)
- Gapotchenko.FX.Text (>= 2024.1.3)
-
net6.0
- Gapotchenko.FX (>= 2024.1.3)
- Gapotchenko.FX.Text (>= 2024.1.3)
-
net7.0
- Gapotchenko.FX (>= 2024.1.3)
- Gapotchenko.FX.Text (>= 2024.1.3)
-
net8.0
- Gapotchenko.FX (>= 2024.1.3)
- Gapotchenko.FX.Text (>= 2024.1.3)
-
net9.0
- Gapotchenko.FX (>= 2024.1.3)
- Gapotchenko.FX.Text (>= 2024.1.3)
NuGet packages (3)
Showing the top 3 NuGet packages that depend on Gapotchenko.FX.Diagnostics.CommandLine:
Package | Downloads |
---|---|
Gapotchenko.FX.Diagnostics.Process
Provides extended functionality for process manipulation. |
|
Gapotchenko.FX.Diagnostics.WebBrowser
Provides high-level integration with OS web browser. |
|
Gapotchenko.FX.Profiles.Core
Represents the Core profile of Gapotchenko.FX. |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
2024.1.3 | 122 | 11/10/2024 |
2022.2.7 | 38,145 | 5/1/2022 |
2022.2.5 | 1,883 | 5/1/2022 |
2022.1.4 | 989 | 4/6/2022 |
2021.2.21 | 1,086 | 1/21/2022 |
2021.2.20 | 967 | 1/17/2022 |
2021.1.5 | 767 | 7/6/2021 |
2020.2.2-beta | 502 | 11/21/2020 |
2020.1.15 | 908 | 11/5/2020 |
2020.1.9-beta | 562 | 7/14/2020 |
2020.1.8-beta | 524 | 7/14/2020 |
2020.1.7-beta | 587 | 7/14/2020 |
2020.1.1-beta | 638 | 2/11/2020 |
2019.3.7 | 933 | 11/4/2019 |
2019.2.20 | 894 | 8/13/2019 |
2019.1.151 | 996 | 3/30/2019 |