Пример #1
0
        /// <summary>
        /// Runs this builder
        /// </summary>
        /// <param name="context"> </param>
        /// <returns>Returns a set of generated files, in suite relative paths</returns>
        public ISet <TargetRelativePath> Run(IBuildContext context)
        {
            var          csprojPath    = project.Name + ".csproj";
            const string csversionPath = "version.cs";

            using (var csproj = project.RootDirectory.GetChildDirectory("cs").CreateTextFile(csprojPath))
                using (var csversion = project.RootDirectory.CreateTextFile(csversionPath))
                {
                    var references = new HashSet <TargetRelativePath>();
                    foreach (var refBuilder in context.GetDependencies(this).OfType <IReferenceBuilder>().Where(r => r.Reference.Type == ReferenceType.Build))
                    {
                        var builderResults = context.GetResults(refBuilder);
                        references.UnionWith(builderResults);
                    }

                    generator.Generate(project, references, csproj, csversion, csversionPath);
                }

            return(new HashSet <TargetRelativePath>(
                       new[]
            {
                new TargetRelativePath(String.Empty,
                                       suite.SuiteRoot.GetRelativePathFrom(targetDir,
                                                                           Path.Combine(suite.SuiteRoot.GetRelativePath(project.RootDirectory), "cs", csprojPath))),
                new TargetRelativePath(String.Empty,
                                       suite.SuiteRoot.GetRelativePathFrom(targetDir,
                                                                           Path.Combine(suite.SuiteRoot.GetRelativePath(project.RootDirectory), csversionPath)))
            }));
        }
Пример #2
0
        public void SectionsAreCalled()
        {
            var secA = new Mock <IMSBuildProjectSection>();
            var secB = new Mock <IMSBuildProjectSection>();
            var secC = new Mock <IMSBuildProjectSection>();

            var project = new Project("testproject", new Module("testmodule", new Suite(new TestFileSystemDirectory("test"))));
            var refs    = new[] { new TargetRelativePath(String.Empty, "test") };

            using (var output = new StringWriter())
                using (var versionOutput = new StringWriter())
                {
                    var generator = new CsprojGenerator(new[] { secA.Object, secB.Object, secC.Object });
                    generator.Generate(project, refs, output, versionOutput, "version.cs");

                    secA.Verify(s => s.Write(It.IsAny <XmlWriter>(), project, It.IsAny <IMSBuildProjectGeneratorContext>()), Times.Once());
                    secB.Verify(s => s.Write(It.IsAny <XmlWriter>(), project, It.IsAny <IMSBuildProjectGeneratorContext>()), Times.Once());
                    secC.Verify(s => s.Write(It.IsAny <XmlWriter>(), project, It.IsAny <IMSBuildProjectGeneratorContext>()), Times.Once());
                }
        }
Пример #3
0
        /// <summary>
        /// Runs this builder
        /// </summary>
        /// <param name="context"> </param>
        /// <returns>Returns a set of generated files, in suite relative paths</returns>
        public override ISet <TargetRelativePath> Run(IBuildContext context)
        {
            var          csprojPath    = project.Name + ".csproj";
            const string csversionPath = "version.cs";

            using (var csproj = project.RootDirectory.GetChildDirectory("cs").CreateTextFile(csprojPath))
                using (var csversion = project.RootDirectory.CreateTextFile(csversionPath))
                {
                    var references = new HashSet <TargetRelativePath>();
                    foreach (var refBuilder in context.GetDependencies(this).OfType <IReferenceBuilder>().Where(r => r.Reference.Type == ReferenceType.Build))
                    {
                        try
                        {
                            var builderResults = context.GetResults(refBuilder);
                            references.UnionWith(builderResults);
                        }
                        catch (InvalidOperationException ex)
                        {
                            log.ErrorFormat("Failed to get results of reference {0}: {1}", refBuilder, ex.Message);
                            throw;
                        }
                    }

                    generator.Generate(project, references, csproj, csversion, csversionPath);
                }

            return(new HashSet <TargetRelativePath>(
                       new[]
            {
                new TargetRelativePath(String.Empty,
                                       suite.SuiteRoot.GetRelativePathFrom(targetDir,
                                                                           Path.Combine(suite.SuiteRoot.GetRelativePath(project.RootDirectory), "cs", csprojPath))),
                new TargetRelativePath(String.Empty,
                                       suite.SuiteRoot.GetRelativePathFrom(targetDir,
                                                                           Path.Combine(suite.SuiteRoot.GetRelativePath(project.RootDirectory), csversionPath)))
            }));
        }