in src/Microsoft.NET.Sdk.Functions.MSBuild/Tasks/DotNetMuxer.cs [36:82]
public static string MuxerPathOrDefault()
=> MuxerPath ?? MuxerName;
private static string TryFindMuxerPath()
{
var fileName = MuxerName;
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
fileName += ".exe";
}
var mainModule = Process.GetCurrentProcess().MainModule;
if (!string.IsNullOrEmpty(mainModule?.FileName)
&& Path.GetFileName(mainModule.FileName).Equals(fileName, StringComparison.OrdinalIgnoreCase))
{
return mainModule.FileName;
}
// if Process.MainModule is not available or it does not equal "dotnet(.exe)?", fallback to navigating to the muxer
// by using the location of the shared framework
var method = typeof(AppContext).GetMethod("GetData", BindingFlags.Public | BindingFlags.Static);
var fxDepsFile = method != null
? method.Invoke(null, new[] { "FX_DEPS_FILE" }) as string
: null;
if (string.IsNullOrEmpty(fxDepsFile))
{
return null;
}
var muxerDir = new FileInfo(fxDepsFile) // Microsoft.NETCore.App.deps.json
.Directory? // (version)
.Parent? // Microsoft.NETCore.App
.Parent? // shared
.Parent; // DOTNET_HOME
if (muxerDir == null)
{
return null;
}
var muxer = Path.Combine(muxerDir.FullName, fileName);
return File.Exists(muxer)
? muxer
: null;
}