public BuildContext(BuildCommand command) { Command = command; Bazel = new BazelContext(command); NuGetConfig = ToolPath(command.nuget_config); Tfm = command.tfm; MSBuild = new MSBuildContext( command, Bazel, NuGetConfig, ToolPath(command.directory_bazel_props) ); IsExecutable = command.output_type == "exe"; SdkRoot = ToolPath(command.sdk_root); ProjectFile = ExecPath(command.project_file); ProjectDirectory = Path.GetDirectoryName(ProjectFile) !; IsTest = !string.IsNullOrEmpty(command.is_test); ProjectBazelProps = new Dictionary <string, string>() { ["Workspace"] = Bazel.Label.Workspace }; void TrySetProp(string?value, string name) { value = value?.Trim('\'', '"'); if (!string.IsNullOrEmpty(value)) { ProjectBazelProps ![name] = value; }
public void UnknownSdk_DotNetMSBuildSdkResolverDoesNotFatalReportError() { var resolution = SdkResolution.GetResolver(Runtime.SystemAssemblyService.CurrentRuntime); // Using a sdk with an invalid version to prevent the NuGet sdk resolver causing a test crash. // Invalid version numbers cause the NuGet sdk resolver to not try to resolve the sdk. The crash // only seems to happen with this test - using the IDE does not trigger the crash. There is a // separate NuGet sdk resolver test that runs the resolver. Crash error: // NuGet.Configuration.NuGetPathContext doesn't implement interface NuGet.Common.INuGetPathContext var sdkReference = new SdkReference("MonoDevelop.Unknown.Test.Sdk", "InvalidVersion", null); var logger = new TestLoggingService(); var context = new MSBuildContext(); string result = null; UserException ex = Assert.Throws <UserException> (() => { result = resolution.GetSdkPath(sdkReference, logger, context, null, null); }); var error = logger.FatalBuildErrors.FirstOrDefault(); Assert.AreEqual(0, logger.FatalBuildErrors.Count, "First error: " + error); Assert.IsNull(result); Assert.AreEqual("Unable to find SDK 'MonoDevelop.Unknown.Test.Sdk/InvalidVersion'", ex.Message); Assert.That(ex.Details, Contains.Substring("SDK not found")); // MonoDevelop.Projects.MSBuild.Resolver Assert.That(ex.Details, Contains.Substring("Check that a recent enough .NET Core SDK is installed")); // .NET Core SDK resolver }
public ProjectSystemController(DnxContext dnxContext, MSBuildContext msbuildContext, ScriptCsContext scriptCsContext, OmnisharpWorkspace workspace) { _dnxContext = dnxContext; _msbuildContext = msbuildContext; _scriptCsContext = scriptCsContext; _workspace = workspace; }
public ProjectSystemController(AspNet5Context aspnet5Context, MSBuildContext msbuildContext, ScriptCsContext scriptCsContext, OmnisharpWorkspace workspace) { _aspnet5Context = aspnet5Context; _msbuildContext = msbuildContext; _scriptCsContext = scriptCsContext; _workspace = workspace; }
public ProjectEventForwarder(AspNet5Context aspnet5Context, MSBuildContext msbuildContext, OmnisharpWorkspace workspace, IEventEmitter emitter) { _aspnet5Context = aspnet5Context; _msbuildContext = msbuildContext; _workspace = workspace; _emitter = emitter; _workspace.WorkspaceChanged += OnWorkspaceChanged; }
public ProjectEventForwarder(DnxContext dnxContext, MSBuildContext msbuildContext, OmnisharpWorkspace workspace, IEventEmitter emitter) { _dnxContext = dnxContext; _msbuildContext = msbuildContext; _workspace = workspace; _emitter = emitter; _workspace.WorkspaceChanged += OnWorkspaceChanged; }
/// <summary> /// Get path on disk to the referenced SDK. /// </summary> /// <param name="sdk">SDK referenced by the Project.</param> /// <param name="logger">Logging service.</param> /// <param name="buildEventContext">Build event context for logging.</param> /// <param name="projectFile">Location of the element within the project which referenced the SDK.</param> /// <param name="solutionPath">Path to the solution if known.</param> /// <returns>Path to the root of the referenced SDK.</returns> internal string GetSdkPath(SdkReference sdk, ILoggingService logger, MSBuildContext buildEventContext, string projectFile, string solutionPath) { if (_resolvers == null) { Initialize(logger); } var results = new List <SdkResultImpl> (); try { var buildEngineLogger = new SdkLoggerImpl(logger, buildEventContext); foreach (var sdkResolver in _resolvers) { var context = new SdkResolverContextImpl(buildEngineLogger, projectFile, solutionPath, msbuildVersion); var resultFactory = new SdkResultFactoryImpl(sdk); try { var result = (SdkResultImpl)sdkResolver.Resolve(sdk, context, resultFactory); if (result != null && result.Success) { LogWarnings(logger, buildEventContext, projectFile, result); return(result.Path); } if (result != null) { results.Add(result); } } catch (Exception e) { logger.LogFatalBuildError(buildEventContext, e, projectFile); } } } catch (Exception e) { logger.LogFatalBuildError(buildEventContext, e, projectFile); throw; } foreach (var result in results) { LogWarnings(logger, buildEventContext, projectFile, result); if (result.Errors != null) { foreach (var error in result.Errors) { logger.LogErrorFromText(buildEventContext, subcategoryResourceName: null, errorCode: null, helpKeyword: null, file: projectFile, message: error); } } } return(null); }
static void LogWarnings(ILoggingService logger, MSBuildContext bec, string projectFile, SdkResultImpl result) { if (result.Warnings == null) { return; } foreach (var warning in result.Warnings) { logger.LogWarningFromText(bec, null, null, null, projectFile, warning); } }
public MsBuildWorkspaceInformation(MSBuildContext msbuildContext) { SolutionPath = msbuildContext.SolutionPath; Projects = msbuildContext.Projects.Values.Select(p => new MSBuildProject { AssemblyName = p.AssemblyName, Path = p.ProjectFilePath, TargetPath = p.TargetPath, ProjectGuid = p.ProjectId, TargetFramework = p.TargetFramework.ToString() }); }
public void Project_path_is_case_insensitive() { var projectPath = @"c:\projects\project1\project.csproj"; var searchProjectPath = @"c:\Projects\Project1\Project.csproj"; MSBuildContext context = new MSBuildContext(); context.Projects.Add(projectPath, new ProjectFileInfo()); ProjectFileInfo outInfo = null; Assert.True(context.Projects.TryGetValue(searchProjectPath, out outInfo)); Assert.NotNull(outInfo); }
public MsBuildWorkspaceInformation(MSBuildContext msbuildContext, bool excludeSourceFiles) { SolutionPath = msbuildContext.SolutionPath; Projects = msbuildContext .Projects .Values .OrderBy(x => x.AssemblyName) .Select(p => { var project = new MSBuildProject(p); if (excludeSourceFiles) { project.SourceFiles = null; } return(project); }); }
public void UnknownSdk_DotNetMSBuildSdkResolverDoesNotFatalReportError() { var resolution = SdkResolution.GetResolver(Runtime.SystemAssemblyService.CurrentRuntime); // Using a sdk with an invalid version to prevent the NuGet sdk resolver causing a test crash. // Invalid version numbers cause the NuGet sdk resolver to not try to resolve the sdk. The crash // only seems to happen with this test - using the IDE does not trigger the crash. There is a // separate NuGet sdk resolver test that runs the resolver. Crash error: // NuGet.Configuration.NuGetPathContext doesn't implement interface NuGet.Common.INuGetPathContext var sdkReference = new SdkReference("MonoDevelop.Unknown.Test.Sdk", "InvalidVersion", null); var logger = new TestLoggingService(); var context = new MSBuildContext(); var result = resolution.GetSdkPath(sdkReference, logger, context, null, null); var error = logger.FatalBuildErrors.FirstOrDefault(); Assert.AreEqual(0, logger.FatalBuildErrors.Count, "First error: " + error); Assert.IsNull(result); }
public ProtobuildProjectSystem( OmnisharpWorkspace workspace, IOmnisharpEnvironment env, ILoggerFactory loggerFactory, IEventEmitter emitter, IMetadataFileReferenceCache metadataReferenceCache, IFileSystemWatcher watcher, MSBuildContext context) : base( workspace, env, loggerFactory, emitter, metadataReferenceCache, watcher, context) { _env = env; _logger = loggerFactory.CreateLogger <ProtobuildProjectSystem>(); _context = context; _watcher = watcher; }
public SdkLoggerImpl(ILoggingService loggingService, MSBuildContext buildEventContext) { _loggingService = loggingService; _buildEventContext = buildEventContext; }
public void LogCommentFromText(MSBuildContext buildEventContext, MessageImportance messageImportance, string message) { LoggingService.LogInfo("[MSBuild] " + message); }
public void LogErrorFromText(MSBuildContext buildEventContext, object subcategoryResourceName, object errorCode, object helpKeyword, string file, string message) { }
public void LogFatalBuildError(MSBuildContext buildEventContext, Exception e, string projectFile) { LoggingService.LogError("[MSBuild]", e); }
public void LogWarningFromText(MSBuildContext bec, object p1, object p2, object p3, string projectFile, string warning) { LoggingService.LogWarning("[MSBuild] " + warning); }
public void LogCommentFromText(MSBuildContext buildEventContext, MessageImportance messageImportance, string message) { }
public void LogWarningFromText(MSBuildContext bec, object p1, object p2, object p3, string projectFile, string warning) { }
public void LogFatalBuildError(MSBuildContext buildEventContext, Exception e, string projectFile) { FatalBuildErrors.Add(e); }
public MsBuildWorkspaceInformation(MSBuildContext msbuildContext) { SolutionPath = msbuildContext.SolutionPath; Projects = msbuildContext.Projects.Values.Select(p => new MSBuildProject(p)); }
/// <summary> /// Get path on disk to the referenced SDK. /// </summary> /// <param name="sdk">SDK referenced by the Project.</param> /// <param name="logger">Logging service.</param> /// <param name="buildEventContext">Build event context for logging.</param> /// <param name="projectFile">Location of the element within the project which referenced the SDK.</param> /// <param name="solutionPath">Path to the solution if known.</param> /// <returns>Path to the root of the referenced SDK.</returns> internal string GetSdkPath(SdkReference sdk, ILoggingService logger, MSBuildContext buildEventContext, string projectFile, string solutionPath) { if (_resolvers == null) { Initialize(logger); } var results = new List <SdkResultImpl> (); try { var buildEngineLogger = new SdkLoggerImpl(logger, buildEventContext); foreach (var sdkResolver in _resolvers) { var context = new SdkResolverContextImpl(buildEngineLogger, projectFile, solutionPath, msbuildVersion); var resultFactory = new SdkResultFactoryImpl(sdk); try { var result = (SdkResultImpl)sdkResolver.Resolve(sdk, context, resultFactory); if (result != null && result.Success) { LogWarnings(logger, buildEventContext, projectFile, result); return(result.Path); } if (result != null) { results.Add(result); } } catch (Exception e) { logger.LogFatalBuildError(buildEventContext, e, projectFile); } } } catch (Exception e) { logger.LogFatalBuildError(buildEventContext, e, projectFile); throw; } StringBuilder errorMessage = null; foreach (var result in results) { LogWarnings(logger, buildEventContext, projectFile, result); if (result.Errors != null) { foreach (var error in result.Errors) { logger.LogErrorFromText(buildEventContext, subcategoryResourceName: null, errorCode: null, helpKeyword: null, file: projectFile, message: error); if (errorMessage == null) { errorMessage = StringBuilderCache.Allocate(); } errorMessage.AppendLine(error); } } } if (errorMessage != null) { throw new UserException( GettextCatalog.GetString("Unable to find SDK '{0}'", sdk), StringBuilderCache.ReturnAndFree(errorMessage)); } return(null); }
public ProjectSystemController(AspNet5Context aspnet5Context, MSBuildContext msbuildContext) { _aspnet5Context = aspnet5Context; _msbuildContext = msbuildContext; }