@joebigelow / wix / commits / 918a7ca2

Add DotnetRunner.

Sean Hall committed Jun 1, 2020 at 13:39 UTC 918a7ca291a9811dd2ff01508e2710b54c86f9eb
1 file changed +57
src/WixBuildTools.TestSupport/DotnetRunner.cs new
+57
@@ -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 +
3 +namespace 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 +}