/// <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))) })); }
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()); } }
/// <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))) })); }