aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2020-06-01 13:39:47 +1000
committerSean Hall <r.sean.hall@gmail.com>2020-06-03 14:24:15 +1000
commit918a7ca291a9811dd2ff01508e2710b54c86f9eb (patch)
tree7a86d1d577e6c05e08fc5499956a94a81fc8766e /src
parentc70de8284987e4977ee40133180a1b220a68da71 (diff)
downloadwix-918a7ca291a9811dd2ff01508e2710b54c86f9eb.tar.gz
wix-918a7ca291a9811dd2ff01508e2710b54c86f9eb.tar.bz2
wix-918a7ca291a9811dd2ff01508e2710b54c86f9eb.zip
Add DotnetRunner.
Diffstat (limited to 'src')
-rw-r--r--src/WixBuildTools.TestSupport/DotnetRunner.cs57
1 files changed, 57 insertions, 0 deletions
diff --git a/src/WixBuildTools.TestSupport/DotnetRunner.cs b/src/WixBuildTools.TestSupport/DotnetRunner.cs
new file mode 100644
index 00000000..82391178
--- /dev/null
+++ b/src/WixBuildTools.TestSupport/DotnetRunner.cs
@@ -0,0 +1,57 @@
1// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3namespace WixBuildTools.TestSupport
4{
5 using System;
6 using System.Collections.Generic;
7 using System.IO;
8
9 public class DotnetRunner : ExternalExecutable
10 {
11 private static readonly object InitLock = new object();
12 private static bool Initialized;
13 private static DotnetRunner Instance;
14
15 public static ExternalExecutableResult Execute(string command, string[] arguments = null) =>
16 InitAndExecute(command, arguments);
17
18 private static ExternalExecutableResult InitAndExecute(string command, string[] arguments)
19 {
20 lock (InitLock)
21 {
22 if (!Initialized)
23 {
24 Initialized = true;
25 var dotnetPath = Environment.GetEnvironmentVariable("DOTNET_HOST_PATH");
26 if (String.IsNullOrEmpty(dotnetPath) || !File.Exists(dotnetPath))
27 {
28 dotnetPath = "dotnet";
29 }
30
31 Instance = new DotnetRunner(dotnetPath);
32 }
33 }
34
35 return Instance.ExecuteCore(command, arguments);
36 }
37
38 private DotnetRunner(string exePath) : base(exePath) { }
39
40 private ExternalExecutableResult ExecuteCore(string command, string[] arguments)
41 {
42 var total = new List<string>
43 {
44 command,
45 };
46
47 if (arguments != null)
48 {
49 total.AddRange(arguments);
50 }
51
52 var args = CombineArguments(total);
53 var mergeErrorIntoOutput = true;
54 return this.Run(args, mergeErrorIntoOutput);
55 }
56 }
57}