private void LoadSolutionInfo() { List <string> solutionFiles = SearchForSolutionFile(CISession.RootDirectory.ToString(), ".sln"); ControlFlow.Assert(solutionFiles.Count != 0, "Unable to find the solution file"); ControlFlow.Assert(solutionFiles.Count == 1, "Found more than 1 solution file under the root directory - - We can only work with 1 solution file." + CISession.RootDirectory.ToString()); CISession.SolutionFileName = solutionFiles[0]; CISession.Solution = SolutionSerializer.DeserializeFromFile <Solution>(CISession.SolutionFileName); CISession.SolutionPath = CISession.Solution.Directory; }
public void DuplicatedProjectTest() { var content = @" Project(""{9A19103F-16F7-4668-BE54-9A1E7A4F7556}"") = ""_build"", ""build\_build.csproj"", ""{BB6A9024-24DB-4170-A09B-02349148A78F}"" EndProject Project(""{9A19103F-16F7-4668-BE54-9A1E7A4F7556}"") = ""_build"", ""build\_build.csproj"", ""{BB6A9024-24DB-4170-A09B-02349148A78F}"" EndProject Global EndGlobal".SplitLineBreaks(); Action action = () => SolutionSerializer.DeserializeFromContent <Solution>(content); action.Should().Throw <Exception>() .Where(x => x.Message.Contains("Solution contains duplicated project ids") && x.Message.Contains(" - bb6a9024-24db-4170-a09b-02349148a78f")); }
public void DuplicatedProjectConfigurationTest() { var content = @" Global GlobalSection(ProjectConfigurationPlatforms) = postSolution {BB6A9024-24DB-4170-A09B-02349148A78F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BB6A9024-24DB-4170-A09B-02349148A78F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BB6A9024-24DB-4170-A09B-02349148A78F}.Release|Any CPU.ActiveCfg = Debug|Any CPU EndGlobalSection EndGlobal".SplitLineBreaks(); Action action = () => SolutionSerializer.DeserializeFromContent <Solution>(content); action.Should().Throw <Exception>() .Where(x => x.Message.Contains("Solution contains duplicated ProjectConfigurationPlatforms entries") && x.Message.Contains(" - {BB6A9024-24DB-4170-A09B-02349148A78F}.Debug|Any CPU.ActiveCfg")); }
public void DuplicatedSolutionConfigurationTest() { var content = @" Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection EndGlobal".SplitLineBreaks(); Action action = () => SolutionSerializer.DeserializeFromContent <Solution>(content); action.Should().Throw <Exception>() .Where(x => x.Message.Contains("Solution contains duplicated SolutionConfigurationPlatforms entries") && x.Message.Contains(" - Debug|Any CPU")); }
public void Execute(GeneratorExecutionContext context) { var compilation = context.Compilation; var allTypes = compilation.Assembly.GlobalNamespace.GetAllTypes(); var membersWithAttributes = allTypes.SelectMany(x => x.GetMembers()) .Where(x => x is IPropertySymbol || x is IFieldSymbol) .Select(x => (Member: x, AttributeData: x.GetAttributeData("global::Nuke.Common.ProjectModel.SolutionAttribute"))) .Where(x => x.AttributeData != null).ToList(); if (membersWithAttributes.Count == 0) { return; } var rootDirectory = GetRootDirectoryFrom(compilation); var compilationUnit = CompilationUnit() .AddUsings(UsingDirective(IdentifierName("Nuke.Common.ProjectModel"))); foreach (var(member, attributeData) in membersWithAttributes) { var attributeArguments = attributeData.NamedArguments; if (attributeArguments.SingleOrDefault(x => x.Key == "GenerateProjects").Value.Value as bool? != true) { continue; } var solutionFile = GetSolutionFileFromParametersFile(rootDirectory, member.Name); var solution = SolutionSerializer.DeserializeFromFile <Solution>(solutionFile); var classDeclaration = GetSolutionFolderDeclaration(member.Name, solution.SolutionFolders, solution.Projects, isSolution: true); compilationUnit = compilationUnit .AddMembers(member.ContainingType.ContainingNamespace.Equals(compilation.GlobalNamespace, SymbolEqualityComparer.Default) ? NamespaceDeclaration(IdentifierName(member.ContainingType.ContainingNamespace.GetFullName())) .AddMembers(classDeclaration) : classDeclaration); } var source = compilationUnit.NormalizeWhitespace().ToFullString(); context.AddSource(nameof(StronglyTypedSolutionGenerator), source); }
private void CreateOutput() { var solutionSerializer = new SolutionSerializer(_outputFilePath); solutionSerializer.Serialize(_problemData); }