BuildXL with MSBuild fails on macOS
@smera is already working on this.
Since Aug 16, 2019.
- Dominant language
- C#
- Stars
- 1k
- Forks
- 167
- PR merge metrics
- No merged PRs in 30d
Description
I am attempting to run BuildXL with an MsBuildResolver, pointing to exactly one csproj file (dotnet new console, unaltered), on a Mac. (The provided MsBuildHelloWorld sample won't work because it contains a vcxproj.) However, the following exception is always thrown:
critical DX0059: Catastrophic BuildXL Failure.
Build:[0.1.0-20190803.1][refs/heads/master:f23a88a5c54c8bc3b4d6c6748767e0ce0b26db83].
Exception:System.Diagnostics.ContractsLight.ContractException: Assertion failed: Invalid path ''.
at \.\Public\Src\Utilities\Utilities\AbsolutePath.cs:316
at void System.Diagnostics.ContractsLight.ContractRuntimeHelper.ReportFailure(ContractFailureKind kind, string msg, string conditionTxt, Provenance provenence)
at AbsolutePath BuildXL.Utilities.AbsolutePath.Create(PathTable table, StringSegment absolutePath) in \.\Public\Src\Utilities\Utilities\AbsolutePath.cs:line 319
at AbsolutePath BuildXL.Utilities.AbsolutePath.Create(PathTable table, string absolutePath) in \.\Public\Src\Utilities\Utilities\AbsolutePath.cs:line 297
at FileAccessManifest BuildXL.FrontEnd.MsBuild.MsBuildWorkspaceResolver.GenerateFileAccessManifest(AbsolutePath toolDirectory, AbsolutePath outputFile) in \.\Public\Src\FrontEnd\MsBuild\MsBuildWorkspaceResolver.cs:line 736
at Task<SandboxedProcessResult> BuildXL.FrontEnd.MsBuild.MsBuildWorkspaceResolver.RunMsBuildGraphBuilderAsync(AbsolutePath responseFile, IEnumerable<AbsolutePath> projectEntryPoints, AbsolutePath outputFile, IEnumerable<AbsolutePath> msBuildSearchLocations, AbsolutePath dotnetExeLocation, IBuildParameters buildParameters) in \.\Public\Src\FrontEnd\MsBuild\MsBuildWorkspaceResolver.cs:line 653
at async Task<Possible<ProjectGraphWithPredictionsResult<AbsolutePath>>> BuildXL.FrontEnd.MsBuild.MsBuildWorkspaceResolver.ComputeBuildGraphAsync(AbsolutePath responseFile, IEnumerable<AbsolutePath> projectEntryPoints, AbsolutePath outputFile, IEnumerable<AbsolutePath> msBuidSearchLocations, IEnumerable<AbsolutePath> dotnetSearchLocations, IBuildParameters buildParameters) in \.\Public\Src\FrontEnd\MsBuild\MsBuildWorkspaceResolver.cs:line 511
at async Task<Possible<ProjectGraphResult>> BuildXL.FrontEnd.MsBuild.MsBuildWorkspaceResolver.TryComputeBuildGraphAsync(IEnumerable<AbsolutePath> msBuildSearchLocations, IEnumerable<AbsolutePath> dotnetSearchLocations, IEnumerable<AbsolutePath> parsingEntryPoints, IBuildParameters buildParameters) in \.\Public\Src\FrontEnd\MsBuild\MsBuildWorkspaceResolver.cs:line 381
at async Task<Possible<ProjectGraphResult>> BuildXL.FrontEnd.MsBuild.MsBuildWorkspaceResolver.TryComputeBuildGraphIfNeededAsync() in \.\Public\Src\FrontEnd\MsBuild\MsBuildWorkspaceResolver.cs:line 300
at async ValueTask<Possible<HashSet<ModuleDescriptor>>> BuildXL.FrontEnd.MsBuild.MsBuildWorkspaceResolver.GetAllKnownModuleDescriptorsAsync() in \.\Public\Src\FrontEnd\MsBuild\MsBuildWorkspaceResolver.cs:line 186
at async Task<Possible<IReadOnlyCollection<ModuleDefinition>>> BuildXL.FrontEnd.Workspaces.WorkspaceResolverExtensionMethods.GetAllModuleDefinitionsAsync(IWorkspaceModuleResolver moduleResolver) in \.\Public\Src\FrontEnd\Sdk\Workspaces\IWorkspaceModuleResolver.cs:line 106
at async Task<Possible<HashSet<ModuleDefinition>>> BuildXL.FrontEnd.Workspaces.Core.WorkspaceProvider.GetModuleDefinitionsForAllResolversAsync() in \.\Public\Src\FrontEnd\Sdk\Workspaces\Core\WorkspaceProvider.cs:line 649
at async Task<Possible<WorkspaceDefinition>> BuildXL.FrontEnd.Workspaces.Core.WorkspaceProvider.GetWorkspaceDefinitionForAllResolversAsync() in \.\Public\Src\FrontEnd\Sdk\Workspaces\Core\WorkspaceProvider.cs:line 191
at async Task<Possible<WorkspaceDefinition>> BuildXL.FrontEnd.Core.FrontEndHostController.TryGetWorkspaceDefinitionAsync(IWorkspaceProvider workspaceProvider) in \.\Public\Src\FrontEnd\Core\FrontEndHostController.Workspace.cs:line 386
at async Task<Workspace> BuildXL.FrontEnd.Core.FrontEndHostController.BuildAndFilterWorkspaceAsync(IWorkspaceProvider workspaceProvider, FrontEndEngineAbstraction engineAbstraction, EvaluationFilter evaluationFilter) in \.\Public\Src\FrontEnd\Core\FrontEndHostController.Workspace.cs:line 153
at async Task<T> BuildXL.Utilities.Tasks.TaskUtilities.WithCancellationHandlingAsync<T>(LoggingContext loggingContext, Task<T> evaluationTask, Action<LoggingContext> errorLogEvent, T errorValue, CancellationToken cancellationToken)
at Workspace BuildXL.FrontEnd.Core.FrontEndHostController.DoPhaseBuildWorkspace(IConfiguration configuration, FrontEndEngineAbstraction engineAbstraction, EvaluationFilter evaluationFilter, QualifierId[] requestedQualifiers) in \.\Public\Src\FrontEnd\Core\FrontEndHostController.Workspace.cs:line 103
at bool BuildXL.FrontEnd.Core.FrontEndHostController.BuildXL.FrontEnd.Sdk.IFrontEndController.PopulateGraph(Task<Possible<EngineCache>> cacheTask, IPipGraph graph, FrontEndEngineAbstraction engineAbstraction, EvaluationFilter evaluationFilter, IConfiguration configuration, IStartupConfiguration startupConfiguration)+(LoggingContext nestedLoggingContext, ref WorkspaceStatistics statistics) => { } [3] in \.\Public\Src\FrontEnd\Core\FrontEndHostController.cs:line 393
at bool BuildXL.FrontEnd.Core.FrontEndHostController.ProcessPhase<TStatistics>(EnginePhases phase, IConfiguration configuration, Action<LoggingContext> startPhaseLogMessage, Action<LoggingContext, TStatistics> endPhaseLogMessage, PhaseLogicHandler<TStatistics> phaseLogicHandler) in \.\Public\Src\FrontEnd\Core\FrontEndHostController.cs:line 994
at bool BuildXL.FrontEnd.Core.FrontEndHostController.BuildXL.FrontEnd.Sdk.IFrontEndController.PopulateGraph(Task<Possible<EngineCache>> cacheTask, IPipGraph graph, FrontEndEngineAbstraction engineAbstraction, EvaluationFilter evaluationFilter, IConfiguration configuration, IStartupConfiguration startupConfiguration) in \.\Public\Src\FrontEnd\Core\FrontEndHostController.cs:line 386
at bool BuildXL.Engine.BuildXLEngine.ConstructAndEvaluateGraph(LoggingContext loggingContext, FrontEndEngineAbstraction frontEndEngineAbstration, CacheInitializationTask engineCacheTask, MountsTable mountsTable, EvaluationFilter evaluationFilter, GraphReuseResult reuseResult, out PipGraph pipGraph) in \.\Public\Src\Engine\Dll\Engine.FrontEnd.cs:line 72
at ConstructScheduleResult BuildXL.Engine.BuildXLEngine.ConstructSchedule(LoggingContext loggingContext, int maxDegreeOfParallelism, CacheInitializationTask cacheInitializationTask, JournalState journalState, EngineState engineState, out EngineSchedule engineSchedule, out RootFilter rootFilter) in \.\Public\Src\Engine\Dll\Engine.cs:line 2721
at BuildXLEngineResult BuildXL.Engine.BuildXLEngine.DoRun(LoggingContext loggingContext, EngineState engineState, bool disposeFrontEnd) in \.\Public\Src\Engine\Dll\Engine.cs:line 1730
at EngineState BuildXL.BuildXLApp.RunEngine(EngineContext engineContext, FrontEndControllerFactory factory, TrackingEventListener trackingEventListener, EngineState engineState, out EngineLiveVisualizationInformation visualizationInformation) in \.\Public\Src\App\Bxl\BuildXLApp.cs:line 1942
at EngineState BuildXL.BuildXLApp.RunEngineWithDecorators(LoggingContext loggingContext, CancellationToken cancellationToken, AppLoggers appLoggers, EngineState engineState, PerformanceCollector collector, out EngineLiveVisualizationInformation visualizationInformation) in \.\Public\Src\App\Bxl\BuildXLApp.cs:line 744
at AppResult BuildXL.BuildXLApp.RunInternal(PerformanceMeasurement pm, CancellationToken cancellationToken, AppLoggers appLoggers, EngineState engineState) in \.\Public\Src\App\Bxl\BuildXLApp.cs:line 624
at AppResult BuildXL.BuildXLApp.Run(EngineState engineState)+(PerformanceMeasurement pm) => { } in \.\Public\Src\App\Bxl\BuildXLApp.cs:line 480
at AppResult BuildXL.BuildXLApp.RunWithLoggingScope(Func<PerformanceMeasurement, AppResult> run, Action sendFinalStatistics, Action<LoggingContext> configureLogging) in \.\Public\Src\App\Bxl\BuildXLApp.cs:line 978
at AppResult BuildXL.BuildXLApp.Run(EngineState engineState) in \.\Public\Src\App\Bxl\BuildXLApp.cs:line 425
at ExitKind BuildXL.Program.RunSingleInstance(IReadOnlyCollection<string> rawArgs, Nullable<ServerModeStatusAndPerf> serverModeStatusAndPerf) in \.\Public\Src\App\Bxl\Program.cs:line 167
at int BuildXL.Program.Run() in \.\Public\Src\App\Bxl\Program.cs:line 127
at int BuildXL.Program.Main(string[] rawArgs) in \.\Public\Src\App\Bxl\Program.cs:line 47
I have traced the issue to here. Presumably, Environment.SpecialFolder.Windows is returning an empty string (completely understandable, since Macs don't have a C:\Windows directory), which is then causing AbsolutePath.Create() to choke. This prevents the use of any MSBuild-based project with BuildXL when run on a non-Windows platform. I don't quite know enough about BuildXL's internals to be able to fix this myself. Thanks!
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.