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