Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

BuildXL with MSBuild fails on macOS #716

Open
wjk opened this issue Aug 8, 2019 · 0 comments
Open

BuildXL with MSBuild fails on macOS #716

wjk opened this issue Aug 8, 2019 · 0 comments
Assignees

Comments

@wjk
Copy link

wjk commented Aug 8, 2019

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!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants