Example #1
0
        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;
                }
Example #2
0
        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;
 }
Example #5
0
 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;
 }
Example #7
0
        /// <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);
        }
Example #8
0
        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);
            }
        }
Example #9
0
        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);
            });
        }
Example #12
0
        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);
        }
Example #13
0
 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;
 }
Example #14
0
 public SdkLoggerImpl(ILoggingService loggingService, MSBuildContext buildEventContext)
 {
     _loggingService    = loggingService;
     _buildEventContext = buildEventContext;
 }
 public void LogCommentFromText(MSBuildContext buildEventContext, MessageImportance messageImportance, string message)
 {
     LoggingService.LogInfo("[MSBuild] " + message);
 }
Example #16
0
 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);
 }
Example #19
0
 public void LogCommentFromText(MSBuildContext buildEventContext, MessageImportance messageImportance, string message)
 {
 }
Example #20
0
 public void LogWarningFromText(MSBuildContext bec, object p1, object p2, object p3, string projectFile, string warning)
 {
 }
Example #21
0
 public void LogFatalBuildError(MSBuildContext buildEventContext, Exception e, string projectFile)
 {
     FatalBuildErrors.Add(e);
 }
Example #22
0
        public MsBuildWorkspaceInformation(MSBuildContext msbuildContext)
        {
            SolutionPath = msbuildContext.SolutionPath;

            Projects = msbuildContext.Projects.Values.Select(p => new MSBuildProject(p));
        }
Example #23
0
        /// <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);
        }
Example #24
0
 public ProjectSystemController(AspNet5Context aspnet5Context, MSBuildContext msbuildContext)
 {
     _aspnet5Context = aspnet5Context;
     _msbuildContext = msbuildContext;
 }