diff --git a/src/Razor/Microsoft.NET.Sdk.Razor/src/DotnetToolTask.cs b/src/Razor/Microsoft.NET.Sdk.Razor/src/DotnetToolTask.cs
index 9a660fb1bf..7aee011260 100644
--- a/src/Razor/Microsoft.NET.Sdk.Razor/src/DotnetToolTask.cs
+++ b/src/Razor/Microsoft.NET.Sdk.Razor/src/DotnetToolTask.cs
@@ -10,7 +10,6 @@ using System.Threading;
using Microsoft.AspNetCore.Razor.Tools;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
-using Microsoft.Extensions.CommandLineUtils;
namespace Microsoft.AspNetCore.Razor.Tasks
{
@@ -19,6 +18,7 @@ namespace Microsoft.AspNetCore.Razor.Tasks
// From https://github.com/dotnet/corefx/blob/29cd6a0b0ac2993cee23ebaf36ca3d4bce6dd75f/src/System.IO.Pipes/ref/System.IO.Pipes.cs#L93.
// Using the enum value directly as this option is not available in netstandard.
private const PipeOptions PipeOptionCurrentUserOnly = (PipeOptions)536870912;
+ private string _dotnetPath;
private CancellationTokenSource _razorServerCts;
@@ -40,7 +40,7 @@ namespace Microsoft.AspNetCore.Razor.Tasks
public string PipeName { get; set; }
- protected override string ToolName => "dotnet";
+ protected override string ToolName => Path.GetDirectoryName(DotNetPath);
// If we're debugging then make all of the stdout gets logged in MSBuild
protected override MessageImportance StandardOutputLoggingImportance => DebugTool ? MessageImportance.High : base.StandardOutputLoggingImportance;
@@ -49,17 +49,25 @@ namespace Microsoft.AspNetCore.Razor.Tasks
internal abstract string Command { get; }
- protected override string GenerateFullPathToTool()
- {
-#if NETSTANDARD2_0
- if (!string.IsNullOrEmpty(DotNetMuxer.MuxerPath))
- {
- return DotNetMuxer.MuxerPath;
- }
-#endif
+ protected override string GenerateFullPathToTool() => DotNetPath;
- // use PATH to find dotnet
- return ToolExe;
+ private string DotNetPath
+ {
+ get
+ {
+ if (!string.IsNullOrEmpty(_dotnetPath))
+ {
+ return _dotnetPath;
+ }
+
+ _dotnetPath = Environment.GetEnvironmentVariable("DOTNET_HOST_PATH");
+ if (string.IsNullOrEmpty(_dotnetPath))
+ {
+ throw new InvalidOperationException("DOTNET_HOST_PATH is not set");
+ }
+
+ return _dotnetPath;
+ }
}
protected override string GenerateCommandLineCommands()
diff --git a/src/Razor/Microsoft.NET.Sdk.Razor/src/Microsoft.NET.Sdk.Razor.csproj b/src/Razor/Microsoft.NET.Sdk.Razor/src/Microsoft.NET.Sdk.Razor.csproj
index 8225d2b220..75c4d79dc7 100644
--- a/src/Razor/Microsoft.NET.Sdk.Razor/src/Microsoft.NET.Sdk.Razor.csproj
+++ b/src/Razor/Microsoft.NET.Sdk.Razor/src/Microsoft.NET.Sdk.Razor.csproj
@@ -49,7 +49,7 @@
Shared\Client.cs
-
+
diff --git a/src/Razor/Microsoft.NET.Sdk.Razor/src/build/netstandard2.0/Microsoft.NET.Sdk.Razor.CodeGeneration.targets b/src/Razor/Microsoft.NET.Sdk.Razor/src/build/netstandard2.0/Microsoft.NET.Sdk.Razor.CodeGeneration.targets
index 99a7c037b8..76c4bba7c9 100644
--- a/src/Razor/Microsoft.NET.Sdk.Razor/src/build/netstandard2.0/Microsoft.NET.Sdk.Razor.CodeGeneration.targets
+++ b/src/Razor/Microsoft.NET.Sdk.Razor/src/build/netstandard2.0/Microsoft.NET.Sdk.Razor.CodeGeneration.targets
@@ -98,6 +98,8 @@ Copyright (c) .NET Foundation. All rights reserved.
Debug="$(_RazorDebugTagHelperTask)"
DebugTool="$(_RazorDebugTagHelperTool)"
ToolAssembly="$(_RazorSdkToolAssembly)"
+ ToolExe="$(_RazorSdkDotNetHostFileName)"
+ ToolPath="$(_RazorSdkDotNetHostDirectory)"
UseServer="$(UseRazorBuildServer)"
ForceServer="$(_RazorForceBuildServer)"
PipeName="$(_RazorBuildServerPipeName)"
@@ -149,6 +151,8 @@ Copyright (c) .NET Foundation. All rights reserved.
Debug="$(_RazorDebugGenerateCodeTask)"
DebugTool="$(_RazorDebugGenerateCodeTool)"
ToolAssembly="$(_RazorSdkToolAssembly)"
+ ToolExe="$(_RazorSdkDotNetHostFileName)"
+ ToolPath="$(_RazorSdkDotNetHostDirectory)"
UseServer="$(UseRazorBuildServer)"
ForceServer="$(_RazorForceBuildServer)"
PipeName="$(_RazorBuildServerPipeName)"
diff --git a/src/Razor/Microsoft.NET.Sdk.Razor/src/build/netstandard2.0/Microsoft.NET.Sdk.Razor.Component.targets b/src/Razor/Microsoft.NET.Sdk.Razor/src/build/netstandard2.0/Microsoft.NET.Sdk.Razor.Component.targets
index 8f1ceefb01..dd64c02b3d 100644
--- a/src/Razor/Microsoft.NET.Sdk.Razor/src/build/netstandard2.0/Microsoft.NET.Sdk.Razor.Component.targets
+++ b/src/Razor/Microsoft.NET.Sdk.Razor/src/build/netstandard2.0/Microsoft.NET.Sdk.Razor.Component.targets
@@ -107,6 +107,8 @@ Copyright (c) .NET Foundation. All rights reserved.
+ ToolAssembly="$(_RazorSdkToolAssembly)"
+ ToolExe="$(_RazorSdkDotNetHostFileName)"
+ ToolPath="$(_RazorSdkDotNetHostDirectory)">
diff --git a/src/Razor/Microsoft.NET.Sdk.Razor/src/build/netstandard2.0/Sdk.Razor.CurrentVersion.targets b/src/Razor/Microsoft.NET.Sdk.Razor/src/build/netstandard2.0/Sdk.Razor.CurrentVersion.targets
index 116ec84e5d..0a9b778e6f 100644
--- a/src/Razor/Microsoft.NET.Sdk.Razor/src/build/netstandard2.0/Sdk.Razor.CurrentVersion.targets
+++ b/src/Razor/Microsoft.NET.Sdk.Razor/src/build/netstandard2.0/Sdk.Razor.CurrentVersion.targets
@@ -36,6 +36,12 @@ Copyright (c) .NET Foundation. All rights reserved.
<_RazorSdkToolAssembly>$(RazorSdkDirectoryRoot)tools\rzc.dll
+
+ <_RazorSdkDotNetHostDirectory>$(NetCoreRoot)
+ <_RazorSdkDotNetHostFileName>dotnet
+ <_RazorSdkDotNetHostFileName Condition="'$(OS)' == 'Windows_NT'">dotnet.exe
+
+
<_TargetingNETCoreApp30OrLater Condition=" '$(TargetFrameworkIdentifier)' == '.NETCoreApp' AND