Skip to content

Commit f380bfe

Browse files
committed
Reorg code to isolate agent launchers in a process; some code review changes
1 parent 12fa9ed commit f380bfe

29 files changed

+178
-311
lines changed

NUnitConsole.sln

+39-24
Original file line numberDiff line numberDiff line change
@@ -98,12 +98,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "deprecated", "deprecated",
9898
EndProject
9999
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TestData", "TestData", "{37D508B2-91E0-4B32-869B-DFF9E68EA213}"
100100
EndProject
101-
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "agents", "agents", "{1704B7B2-5AD3-44EA-AB26-445C4E4E2C54}"
102-
EndProject
103-
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "nunit-agent-net462", "src\NUnitEngine\agents\nunit-agent-net462\nunit-agent-net462.csproj", "{E4041712-A1F1-479D-A7F7-89F491066163}"
104-
EndProject
105-
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "nunit-agent-net462-x86", "src\NUnitEngine\agents\nunit-agent-net462-x86\nunit-agent-net462-x86.csproj", "{D4AE483A-D4E1-4892-AF87-3607FBA8755F}"
106-
EndProject
107101
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "nunit4-console", "src\NUnitConsole\nunit4-console\nunit4-console.csproj", "{E1F5F8D3-4AC4-4BB0-9438-2BF41768B473}"
108102
EndProject
109103
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "nunit4-console.tests", "src\NUnitConsole\nunit4-console.tests\nunit4-console.tests.csproj", "{0D6B575A-93B4-4944-B4C0-68CDD413B904}"
@@ -124,8 +118,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{
124118
EndProject
125119
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".config", ".config", "{0F76DA4A-58B9-4B45-BEC5-259105570D11}"
126120
EndProject
127-
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "nunit-agent-net80", "src\NUnitEngine\agents\nunit-agent-net80\nunit-agent-net80.csproj", "{CD357A8B-BE40-4F63-92DA-A71B94EE47E4}"
128-
EndProject
129121
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AppContextTest", "src\TestData\AppContextTest\AppContextTest.csproj", "{E79A3CCD-07E2-4C50-B8BF-1C5844720725}"
130122
EndProject
131123
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InvalidTestNames", "src\TestData\InvalidTestNames\InvalidTestNames.csproj", "{48DF1E40-93BA-436A-B460-5D1130316ADA}"
@@ -172,6 +164,20 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "nunit.agent.core", "nunit.a
172164
nuget\nunit.agent.core\nunit.agent.core.nuspec = nuget\nunit.agent.core\nunit.agent.core.nuspec
173165
EndProjectSection
174166
EndProject
167+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Net462Agent", "Net462Agent", "{1D797C1F-AAD2-4104-B833-0014C6A692CA}"
168+
EndProject
169+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Net80Agent", "Net80Agent", "{857FE03B-D7C2-4203-9F6A-D967BF7B8FFF}"
170+
EndProject
171+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "nunit-agent-net80", "src\Net80Agent\agent\nunit-agent-net80.csproj", "{2BE1BDE0-C270-3280-47FD-30E6FCEB4FDB}"
172+
EndProject
173+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "agent-launcher-net80", "src\Net80Agent\launcher\agent-launcher-net80.csproj", "{10ACF018-15A8-04EB-5E42-E67CF7AE6C18}"
174+
EndProject
175+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "nunit-agent-net462", "src\Net462Agent\agent\nunit-agent-net462.csproj", "{652A6B02-4B1D-9F0E-5339-D6FD91B39F79}"
176+
EndProject
177+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "agent-launcher-net462", "src\Net462Agent\launcher\agent-launcher-net462.csproj", "{6489409F-91C9-2C69-BD4C-DDAB0A367AF5}"
178+
EndProject
179+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "nunit-agent-net462-x86", "src\Net462Agent\agent-x86\nunit-agent-net462-x86.csproj", "{566907AA-AA85-D6E0-AF76-64CAEF48DE84}"
180+
EndProject
175181
Global
176182
GlobalSection(SolutionConfigurationPlatforms) = preSolution
177183
Debug|Any CPU = Debug|Any CPU
@@ -202,14 +208,6 @@ Global
202208
{9D3015EE-5B84-41B3-A1D3-1A439370C392}.Debug|Any CPU.Build.0 = Debug|Any CPU
203209
{9D3015EE-5B84-41B3-A1D3-1A439370C392}.Release|Any CPU.ActiveCfg = Release|Any CPU
204210
{9D3015EE-5B84-41B3-A1D3-1A439370C392}.Release|Any CPU.Build.0 = Release|Any CPU
205-
{E4041712-A1F1-479D-A7F7-89F491066163}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
206-
{E4041712-A1F1-479D-A7F7-89F491066163}.Debug|Any CPU.Build.0 = Debug|Any CPU
207-
{E4041712-A1F1-479D-A7F7-89F491066163}.Release|Any CPU.ActiveCfg = Release|Any CPU
208-
{E4041712-A1F1-479D-A7F7-89F491066163}.Release|Any CPU.Build.0 = Release|Any CPU
209-
{D4AE483A-D4E1-4892-AF87-3607FBA8755F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
210-
{D4AE483A-D4E1-4892-AF87-3607FBA8755F}.Debug|Any CPU.Build.0 = Debug|Any CPU
211-
{D4AE483A-D4E1-4892-AF87-3607FBA8755F}.Release|Any CPU.ActiveCfg = Release|Any CPU
212-
{D4AE483A-D4E1-4892-AF87-3607FBA8755F}.Release|Any CPU.Build.0 = Release|Any CPU
213211
{E1F5F8D3-4AC4-4BB0-9438-2BF41768B473}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
214212
{E1F5F8D3-4AC4-4BB0-9438-2BF41768B473}.Debug|Any CPU.Build.0 = Debug|Any CPU
215213
{E1F5F8D3-4AC4-4BB0-9438-2BF41768B473}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -230,10 +228,6 @@ Global
230228
{5BD1B0BA-6DD3-4619-B5E0-4FFF19F941C2}.Debug|Any CPU.Build.0 = Debug|Any CPU
231229
{5BD1B0BA-6DD3-4619-B5E0-4FFF19F941C2}.Release|Any CPU.ActiveCfg = Release|Any CPU
232230
{5BD1B0BA-6DD3-4619-B5E0-4FFF19F941C2}.Release|Any CPU.Build.0 = Release|Any CPU
233-
{CD357A8B-BE40-4F63-92DA-A71B94EE47E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
234-
{CD357A8B-BE40-4F63-92DA-A71B94EE47E4}.Debug|Any CPU.Build.0 = Debug|Any CPU
235-
{CD357A8B-BE40-4F63-92DA-A71B94EE47E4}.Release|Any CPU.ActiveCfg = Release|Any CPU
236-
{CD357A8B-BE40-4F63-92DA-A71B94EE47E4}.Release|Any CPU.Build.0 = Release|Any CPU
237231
{E79A3CCD-07E2-4C50-B8BF-1C5844720725}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
238232
{E79A3CCD-07E2-4C50-B8BF-1C5844720725}.Debug|Any CPU.Build.0 = Debug|Any CPU
239233
{E79A3CCD-07E2-4C50-B8BF-1C5844720725}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -302,6 +296,26 @@ Global
302296
{0E415863-1621-41DB-9DB0-36B5664DFF35}.Debug|Any CPU.Build.0 = Debug|Any CPU
303297
{0E415863-1621-41DB-9DB0-36B5664DFF35}.Release|Any CPU.ActiveCfg = Release|Any CPU
304298
{0E415863-1621-41DB-9DB0-36B5664DFF35}.Release|Any CPU.Build.0 = Release|Any CPU
299+
{2BE1BDE0-C270-3280-47FD-30E6FCEB4FDB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
300+
{2BE1BDE0-C270-3280-47FD-30E6FCEB4FDB}.Debug|Any CPU.Build.0 = Debug|Any CPU
301+
{2BE1BDE0-C270-3280-47FD-30E6FCEB4FDB}.Release|Any CPU.ActiveCfg = Release|Any CPU
302+
{2BE1BDE0-C270-3280-47FD-30E6FCEB4FDB}.Release|Any CPU.Build.0 = Release|Any CPU
303+
{10ACF018-15A8-04EB-5E42-E67CF7AE6C18}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
304+
{10ACF018-15A8-04EB-5E42-E67CF7AE6C18}.Debug|Any CPU.Build.0 = Debug|Any CPU
305+
{10ACF018-15A8-04EB-5E42-E67CF7AE6C18}.Release|Any CPU.ActiveCfg = Release|Any CPU
306+
{10ACF018-15A8-04EB-5E42-E67CF7AE6C18}.Release|Any CPU.Build.0 = Release|Any CPU
307+
{652A6B02-4B1D-9F0E-5339-D6FD91B39F79}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
308+
{652A6B02-4B1D-9F0E-5339-D6FD91B39F79}.Debug|Any CPU.Build.0 = Debug|Any CPU
309+
{652A6B02-4B1D-9F0E-5339-D6FD91B39F79}.Release|Any CPU.ActiveCfg = Release|Any CPU
310+
{652A6B02-4B1D-9F0E-5339-D6FD91B39F79}.Release|Any CPU.Build.0 = Release|Any CPU
311+
{6489409F-91C9-2C69-BD4C-DDAB0A367AF5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
312+
{6489409F-91C9-2C69-BD4C-DDAB0A367AF5}.Debug|Any CPU.Build.0 = Debug|Any CPU
313+
{6489409F-91C9-2C69-BD4C-DDAB0A367AF5}.Release|Any CPU.ActiveCfg = Release|Any CPU
314+
{6489409F-91C9-2C69-BD4C-DDAB0A367AF5}.Release|Any CPU.Build.0 = Release|Any CPU
315+
{566907AA-AA85-D6E0-AF76-64CAEF48DE84}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
316+
{566907AA-AA85-D6E0-AF76-64CAEF48DE84}.Debug|Any CPU.Build.0 = Debug|Any CPU
317+
{566907AA-AA85-D6E0-AF76-64CAEF48DE84}.Release|Any CPU.ActiveCfg = Release|Any CPU
318+
{566907AA-AA85-D6E0-AF76-64CAEF48DE84}.Release|Any CPU.Build.0 = Release|Any CPU
305319
EndGlobalSection
306320
GlobalSection(SolutionProperties) = preSolution
307321
HideSolutionNode = FALSE
@@ -319,9 +333,6 @@ Global
319333
{9A7C8370-ED1F-486F-A8F5-C5BF4221464E} = {A972031D-2F61-4183-AF75-99EE1A9F6B32}
320334
{9D3015EE-5B84-41B3-A1D3-1A439370C392} = {37D508B2-91E0-4B32-869B-DFF9E68EA213}
321335
{068F6CA9-6108-4F45-8540-351AA5227259} = {4FDF7BFA-A337-41D3-898D-C6A98278E6AD}
322-
{1704B7B2-5AD3-44EA-AB26-445C4E4E2C54} = {31B45C4C-206F-4F31-9CC6-33BF11DFEE39}
323-
{E4041712-A1F1-479D-A7F7-89F491066163} = {1704B7B2-5AD3-44EA-AB26-445C4E4E2C54}
324-
{D4AE483A-D4E1-4892-AF87-3607FBA8755F} = {1704B7B2-5AD3-44EA-AB26-445C4E4E2C54}
325336
{E1F5F8D3-4AC4-4BB0-9438-2BF41768B473} = {576DB1E6-C5EC-4FEF-A826-EC19D8BEE572}
326337
{0D6B575A-93B4-4944-B4C0-68CDD413B904} = {576DB1E6-C5EC-4FEF-A826-EC19D8BEE572}
327338
{9667833E-A037-41C9-A3BC-D218903EF670} = {576DB1E6-C5EC-4FEF-A826-EC19D8BEE572}
@@ -330,7 +341,6 @@ Global
330341
{B25157A1-B3CD-40FB-89F2-A7206C0B553A} = {49D441DF-39FD-4F4D-AECA-86CF8EFE23AF}
331342
{9375E2BF-5AF9-4773-A5D1-EA16D9006940} = {B25157A1-B3CD-40FB-89F2-A7206C0B553A}
332343
{0F76DA4A-58B9-4B45-BEC5-259105570D11} = {49D441DF-39FD-4F4D-AECA-86CF8EFE23AF}
333-
{CD357A8B-BE40-4F63-92DA-A71B94EE47E4} = {1704B7B2-5AD3-44EA-AB26-445C4E4E2C54}
334344
{E79A3CCD-07E2-4C50-B8BF-1C5844720725} = {37D508B2-91E0-4B32-869B-DFF9E68EA213}
335345
{48DF1E40-93BA-436A-B460-5D1130316ADA} = {37D508B2-91E0-4B32-869B-DFF9E68EA213}
336346
{2F9D8932-2186-464F-BED6-7D7979C8FFA6} = {37D508B2-91E0-4B32-869B-DFF9E68EA213}
@@ -350,6 +360,11 @@ Global
350360
{608AA86D-4090-33CA-0031-BD324E5A766E} = {37D508B2-91E0-4B32-869B-DFF9E68EA213}
351361
{0E415863-1621-41DB-9DB0-36B5664DFF35} = {3B30D2E5-1587-4D68-B848-1BDDB3C24BFC}
352362
{02EA681E-C7D8-13C7-8484-4AC65E1B71E8} = {A972031D-2F61-4183-AF75-99EE1A9F6B32}
363+
{2BE1BDE0-C270-3280-47FD-30E6FCEB4FDB} = {857FE03B-D7C2-4203-9F6A-D967BF7B8FFF}
364+
{10ACF018-15A8-04EB-5E42-E67CF7AE6C18} = {857FE03B-D7C2-4203-9F6A-D967BF7B8FFF}
365+
{652A6B02-4B1D-9F0E-5339-D6FD91B39F79} = {1D797C1F-AAD2-4104-B833-0014C6A692CA}
366+
{6489409F-91C9-2C69-BD4C-DDAB0A367AF5} = {1D797C1F-AAD2-4104-B833-0014C6A692CA}
367+
{566907AA-AA85-D6E0-AF76-64CAEF48DE84} = {1D797C1F-AAD2-4104-B833-0014C6A692CA}
353368
EndGlobalSection
354369
GlobalSection(ExtensibilityGlobals) = postSolution
355370
SolutionGuid = {D8E4FC26-5422-4C51-8BBC-D1AC0A578711}

choco/nunit-console-runner.nuspec

+6
Original file line numberDiff line numberDiff line change
@@ -67,5 +67,11 @@
6767
<file src = "$BIN_DIR$agents/net8.0/nunit.common.dll" target="tools/agents/net8.0" />
6868
<file src = "$BIN_DIR$agents/net8.0/testcentric.metadata.dll" target="tools/agents/net8.0" />
6969
<file src = "$BIN_DIR$agents/net8.0/Microsoft.Extensions.DependencyModel.dll" target="tools/agents/net8.0" />
70+
71+
<!-- Temporarily added until agents are dependencies -->
72+
<file src="$BIN_DIR$agents/net462/agent-launcher-net462.dll" target="tools" />
73+
<file src="$BIN_DIR$agents/net462/agent-launcher-net80.dll" target="tools" />
74+
<file src="$BIN_DIR$agents/net462/nunit.agent.core.dll" target="tools" />
75+
<file src="$BIN_DIR$agents/net462/nunit.agent.core.pdb" target="tools" />
7076
</files>
7177
</package>

nuget/runners/nunit.console-runner.nuspec

+8
Original file line numberDiff line numberDiff line change
@@ -82,5 +82,13 @@
8282
<file src="net462/testcentric.metadata.dll" target="tools" />
8383
<file src="../../nuget/runners/nunit.console.nuget.addins" target="tools"/>
8484
<file src="../../nunit_256.png" target="images"/>
85+
86+
<!-- Temporarily added until agents are dependencies -->
87+
<file src="agents/net462/agent-launcher-net462.dll" target="tools" />
88+
<file src="agents/net462/agent-launcher-net462.pdb" target="tools" />
89+
<file src="agents/net462/agent-launcher-net80.dll" target="tools" />
90+
<file src="agents/net462/agent-launcher-net80.pdb" target="tools" />
91+
<file src="agents/net462/nunit.agent.core.dll" target="tools" />
92+
<file src="agents/net462/nunit.agent.core.pdb" target="tools" />
8593
</files>
8694
</package>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>net462</TargetFramework>
5+
<RootNamespace>nunit_agent_launcher_net462</RootNamespace>
6+
<ImplicitUsings>enable</ImplicitUsings>
7+
<Nullable>enable</Nullable>
8+
</PropertyGroup>
9+
10+
</Project>

package-tests.cake

+2-2
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,14 @@ class MockAssemblyExpectedResult : ExpectedResult
5050
StandardRunnerTests.Add(new PackageTest(1, "Net462Test")
5151
{
5252
Description = "Run mock-assembly.dll under .NET 4.6.2",
53-
Arguments = "testdata/net462/mock-assembly.dll",
53+
Arguments = "testdata/net462/mock-assembly.dll --trace:Debug",
5454
ExpectedResult = new MockAssemblyExpectedResult("net-4.6.2")
5555
});
5656

5757
AddToBothLists(new PackageTest(1, "Net80Test")
5858
{
5959
Description = "Run mock-assembly.dll under .NET 8.0",
60-
Arguments = "testdata/net8.0/mock-assembly.dll",
60+
Arguments = "testdata/net8.0/mock-assembly.dll --trace:Debug",
6161
ExpectedResult = new MockAssemblyExpectedResult("netcore-8.0")
6262
});
6363

src/NUnitEngine/nunit.engine/Services/AgentLaunchers/AgentLauncherBase.cs renamed to src/NUnitCommon/nunit.agent.core/Agents/LocalProcessAgentLauncher.cs

+19-50
Original file line numberDiff line numberDiff line change
@@ -3,36 +3,39 @@
33
#if NETFRAMEWORK
44
using NUnit.Engine.Extensibility;
55
using System;
6-
using System.Collections.Generic;
76
using System.Diagnostics;
8-
using System.Linq;
97
using System.Runtime.Versioning;
108
using System.Text;
11-
using System.Threading.Tasks;
129
using NUnit.Common;
13-
using TestCentric.Metadata;
1410
using System.IO;
1511

16-
namespace NUnit.Engine.Services.AgentLaunchers
12+
namespace NUnit.Engine.Agents
1713
{
18-
public abstract class AgentLauncherBase : IAgentLauncher
14+
public abstract class LocalProcessAgentLauncher : IAgentLauncher
1915
{
2016
protected abstract string AgentName { get; }
2117
protected abstract TestAgentType AgentType { get; }
22-
protected abstract FrameworkName TargetRuntime { get; }
18+
protected abstract FrameworkName AgentRuntime { get; }
2319

2420
protected abstract string AgentPath { get; }
25-
protected virtual string X86AgentPath => throw new NotImplementedException(".NET Framework agents must override X86AgentPath");
2621

27-
public TestAgentInfo AgentInfo => new TestAgentInfo(AgentName, TestAgentType.LocalProcess, TargetRuntime);
22+
// Override if the agent path for X86 is different
23+
protected virtual string X86AgentPath => AgentPath;
24+
25+
public TestAgentInfo AgentInfo => new TestAgentInfo(AgentName, TestAgentType.LocalProcess, AgentRuntime);
2826

2927
public bool CanCreateAgent(TestPackage package)
3028
{
3129
// Get target runtime from package
3230
string runtimeSetting = package.GetSetting(EnginePackageSettings.TargetFrameworkName, string.Empty);
3331
var targetRuntime = new FrameworkName(runtimeSetting);
32+
bool runAsX86 = package.GetSetting(EnginePackageSettings.RunAsX86, false);
3433

35-
return targetRuntime.Identifier == TargetRuntime.Identifier && targetRuntime.Version.Major <= TargetRuntime.Version.Major;
34+
// Running under X86 under .NET Core is currently only supported on Windows
35+
if (runAsX86 && targetRuntime.Identifier == FrameworkIdentifiers.NetCoreApp && Path.DirectorySeparatorChar != '\\')
36+
return false;
37+
38+
return targetRuntime.Identifier == AgentRuntime.Identifier && targetRuntime.Version.Major <= AgentRuntime.Version.Major;
3639
}
3740

3841
public Process CreateAgent(Guid agentId, string agencyUrl, TestPackage package)
@@ -74,47 +77,13 @@ public Process CreateAgent(Guid agentId, string agencyUrl, TestPackage package)
7477
startInfo.WorkingDirectory = Environment.CurrentDirectory;
7578
startInfo.LoadUserProfile = loadUserProfile;
7679

77-
switch (TargetRuntime.Identifier)
80+
startInfo.FileName = runAsX86 ? X86AgentPath : AgentPath;
81+
startInfo.Arguments = arguments;
82+
83+
if (AgentRuntime.Identifier == FrameworkIdentifiers.NetCoreApp)
7884
{
79-
case FrameworkIdentifiers.NetFramework:
80-
startInfo.FileName = runAsX86 ? X86AgentPath : AgentPath;
81-
startInfo.Arguments = arguments;
82-
startInfo.LoadUserProfile = loadUserProfile;
83-
// TODO: Re-integrate mono
84-
//if (TargetRuntime.Runtime == Runtime.Mono)
85-
//{
86-
// StartInfo.FileName = RuntimeFrameworkService.MonoExePath;
87-
// string monoOptions = "--runtime=v" + TargetRuntime.FrameworkVersion.ToString(2);
88-
// monoOptions += " --debug";
89-
// StartInfo.Arguments = $"{monoOptions} \"{agentPath}\" {AgentArgs}";
90-
//}
91-
break;
92-
case FrameworkIdentifiers.NetCoreApp:
93-
startInfo.FileName = "dotnet";
94-
startInfo.Arguments = $"\"{AgentPath}\" {arguments}";
95-
startInfo.LoadUserProfile = loadUserProfile;
96-
97-
// TODO: Remove the windows limitation and the use of a hard-coded path.
98-
if (runAsX86)
99-
{
100-
if (Path.DirectorySeparatorChar != '\\')
101-
throw new Exception("Running .NET Core as X86 is currently only supported on Windows");
102-
103-
string? installDirectory = DotNet.GetX86InstallDirectory();
104-
if (installDirectory is null)
105-
throw new Exception("The X86 version of dotnet.exe is not installed");
106-
107-
var x86_dotnet_exe = Path.Combine(installDirectory, "dotnet.exe");
108-
if (!File.Exists(x86_dotnet_exe))
109-
throw new Exception("The X86 version of dotnet.exe is not installed");
110-
111-
startInfo.FileName = x86_dotnet_exe;
112-
}
113-
break;
114-
default:
115-
startInfo.FileName = AgentPath;
116-
startInfo.Arguments = arguments;
117-
break;
85+
startInfo.FileName = DotNet.GetDotNetExe(runAsX86);
86+
startInfo.Arguments = $"\"{AgentPath}\" {arguments}";
11887
}
11988

12089
return process;

src/NUnitCommon/nunit.common/DotNet.cs

+17
Original file line numberDiff line numberDiff line change
@@ -62,5 +62,22 @@ public static class DotNet
6262

6363
return _x86InstallDirectory;
6464
}
65+
66+
public static string GetDotNetExe(bool runAsX86)
67+
{
68+
string? installDirectory = DotNet.GetInstallDirectory(runAsX86);
69+
if (installDirectory is not null)
70+
{
71+
var dotnet_exe = Path.Combine(installDirectory, "dotnet.exe");
72+
if (File.Exists(dotnet_exe))
73+
return dotnet_exe;
74+
}
75+
76+
var msg = runAsX86
77+
? "The X86 version of dotnet.exe is not installed."
78+
: "Unable to locate dotnet.exe.";
79+
80+
throw new Exception(msg);
81+
}
6582
}
6683
}

0 commit comments

Comments
 (0)