private void ParseNetCore(VisualStudioSolutionProject visualStudioProject, XDocument xDocument) { string sdkValue = xDocument.Descendants("Project").Attributes("Sdk").Select(a => a.Value).FirstOrDefault(); visualStudioProject.Type = VsProjectType.NetCore; if (sdkValue == "Microsoft.NET.Sdk.Web") { visualStudioProject.Type |= VsProjectType.Web; return; } if (sdkValue == "Microsoft.NET.Sdk") { string outputType = xDocument.Descendants("OutputType").Select(a => a.Value).FirstOrDefault(); if (outputType != null && outputType.Equals("Exe", StringComparison.InvariantCultureIgnoreCase)) { visualStudioProject.Type |= VsProjectType.Console; } if (xDocument.Descendants("PackageReference").Any(d => d.Attribute("Include")?.Value == "MSTest.TestFramework")) { visualStudioProject.Type |= VsProjectType.Test; } if (xDocument.Descendants("PackageReference").Any(d => d.Attribute("Include")?.Value == "MSTest.TestFramework")) { visualStudioProject.Type |= VsProjectType.ClassLibrary; } } }
public override IGeneratorCommandResult Run() { string projectFileName = FileSystem.GetFileName(this.Parameters.Project); VisualStudioParser parser = new(); VisualStudioSolutionProject project = parser.ParseProject(this.Parameters.Project); if (project == null || project.Id == Guid.Empty) { VisualStudioSolution solution = parser.ParseSolution(this.Parameters.Solution); project = solution?.Projects.FirstOrDefault(x => x.Path.EndsWith(projectFileName)) ?? project; } if (project != null && project.Id == Guid.Empty) { project.Id = Guid.NewGuid(); parser.SetProjectGuid(this.Parameters.Project, project.Id); } if (project == null || project.Id == Guid.Empty) { Logger.Warning($"Can not read project id. No solution for project '{this.Parameters.Project}' found. Automatic file cleanup deactivated!"); return(this.Success()); } this.resolver.Get <IEnvironment>().OutputId = project.Id; return(this.Success().ForceRerunOnAsync()); }
public IList <VisualStudioSolutionProject> Parse(string solutionFilePath) { string text = File.ReadAllText(solutionFilePath); string folder = Path.GetDirectoryName(solutionFilePath); IList <VisualStudioSolutionProject> result = new List <VisualStudioSolutionProject>(); Match match = projectParser.Match(text); while (match.Success) { if (match.Groups["type"].Value == "2150E333-8FDC-42A3-9474-1A3956D46DE8") // project group { match = match.NextMatch(); continue; } VisualStudioSolutionProject visualStudioProject = new VisualStudioSolutionProject() { Guid = Guid.Parse(match.Groups["guid"].Value), Name = match.Groups["name"].Value, ProjectFile = match.Groups["file"].Value, TypeGuid = Guid.Parse(match.Groups["type"].Value), }; string projectFile = Path.Combine(folder, visualStudioProject.ProjectFile); this.ProcessCSProjFile(projectFile, visualStudioProject); result.Add(visualStudioProject); match = match.NextMatch(); } return(result); }
private VisualStudioSolutionProject ParseProject(VisualStudioSolution solution, string projectLine) { var project = new VisualStudioSolutionProject { Solution = solution }; var matches = Regex.Match(projectLine, SolutionConstants.ProjectRegex); project.TypeGuid = new Guid(matches.Groups["typeguid"].Value); project.Name = matches.Groups["name"].Value; project.FileName = matches.Groups["filename"].Value; project.ProjectGuid = new Guid(matches.Groups["projectguid"].Value); string str; while ((str = ReadLine()) != null) { if (str.Equals("EndProject")) { return(project); } else if (str.StartsWith("ProjectSection(")) { project.Sections.Add(ParseProjectSection(str)); } else { throw new Exception($"Unexpected line in project: {str}"); } } return(project); }
private void DetermineProjectType(VisualStudioSolutionProject visualStudioProject, XDocument xDocument, XNamespace fileNamespace) { XElement projectTypeGuids = xDocument.Descendants(fileNamespace + "ProjectTypeGuids").FirstOrDefault(); if (projectTypeGuids != null) { Match match = guidParser.Match(projectTypeGuids.Value); while (match.Success) { visualStudioProject.Type |= this.GetTypeByGuid(match.Groups["guid"].Value); match = match.NextMatch(); } } string typeGuid = visualStudioProject.TypeGuid.ToString().ToUpper(); XElement outputTypeElement = xDocument.Descendants(fileNamespace + "OutputType").FirstOrDefault(); if (outputTypeElement != null && outputTypeElement.Value == "Exe") { visualStudioProject.Type |= VsProjectType.Console; } else if (outputTypeElement != null && outputTypeElement.Value == "WinExe") { visualStudioProject.Type |= VsProjectType.WindowsApplication; } else if (outputTypeElement != null && outputTypeElement.Value == "Database") { visualStudioProject.Type |= VsProjectType.Database; } else if (xDocument.Descendants(fileNamespace + "UseIISExpress").Any()) { visualStudioProject.Type |= VsProjectType.Web; switch (typeGuid.ToUpper()) { case "E3E379DF-F4C6-4180-9B81-6769533ABE47": visualStudioProject.MvcVersion = 4; break; case "E53F8FEA-EAE0-44A6-8774-FFD645390401": visualStudioProject.MvcVersion = 3; break; case "F85E285D-A4E0-4152-9332-AB1D724D3325": visualStudioProject.MvcVersion = 2; break; case "603C0E0B-DB56-11DC-BE95-000D561079B0": visualStudioProject.MvcVersion = 1; break; default: break; } } }
private void DetermineProjectCLR(VisualStudioSolutionProject visualStudioProject, XDocument xDocument, XNamespace fileNamespace) { visualStudioProject.TargetFrameworkVersion = xDocument.Descendants(fileNamespace + "TargetFrameworkVersion").Select(n => n.Value).FirstOrDefault(); visualStudioProject.ContentFiles = xDocument.Descendants(fileNamespace + "Content").Select(n => n.Attribute("Include").Value).ToList(); visualStudioProject.ReferenceLibraries = xDocument .Descendants(fileNamespace + "Content") .SelectMany(n => n.Descendants("HintPath")) .Select(n => n.Value) .ToList(); }
public void Call_WithNormalProject() { var solution = new VisualStudioSolution(); var solutionProject = new VisualStudioSolutionProject(); solutionProject.Solution = solution; var project = visualStudioProjectGenerator.CreateNewProject(solutionProject, "", "", ""); visualStudioProjectWriter.WriteProject("file", solutionProject); mockFileReaderWriter.Received(1).WriteFile(Arg.Any <string>(), Arg.Any <MemoryStream>()); }
private Framework DetectFramework(VisualStudioSolutionProject project) { var frameworkVersionNode = _projectNodeSelector.First(project.Project, "TargetFrameworkVersion"); var targetProfileNode = _projectNodeSelector.First(project.Project, "TargetFrameworkProfile"); if (frameworkVersionNode != null) { return(_stringToFrameworkConverter.Convert(frameworkVersionNode.Value, targetProfileNode?.Value)); } _logger.Error($"TargetFrameworkVersion not found in project {project.Name}"); return(Framework.Unknown); }
public void Analyse(VisualStudioSolutionProject solutionProject, ProjectAnalysis projectAnalysis) { var configurations = _projectNodeSelector.GetPlatformConfigurations(solutionProject.Project); foreach (var configuration in configurations) { var configurationPlatform = _configurationPlatformParser.GetConfigurationAndPlatform(configuration); var configurationPlatformAnalysis = projectAnalysis.GetConfigurationPlatform( configurationPlatform.configuration, configurationPlatform.platform); configurationPlatformAnalysis.LanguageVersion = GetLanguageVersion(configuration); } }
private VisualStudioProjectNode ResolveProjectNode(VisualStudioSolutionProject project, CompileUnit compileUnit) { var relativeFileName = _compileItemFileNameComposer.ComposeFileName(compileUnit.Name, project.TypeGuid); var node = _projectGenerator.GetCompileItem(project.Project, relativeFileName); if (node == null) { node = _projectGenerator.AddCompileItem(project.Project, relativeFileName); } return(node); }
public void Call_With_SolutionFolder() { var solution = new VisualStudioSolution(); var solutionProject = new VisualStudioSolutionProject { TypeGuid = new Guid(VisualStudioSolutionProjectTypeIds.SolutionFolderGuid) }; solutionProject.Solution = solution; visualStudioProjectWriter.WriteProject("file", solutionProject); mockFileReaderWriter.Received(0).WriteFile(Arg.Any <string>(), Arg.Any <MemoryStream>()); }
public void Analyse(VisualStudioSolutionProject solutionProject, ProjectAnalysis projectAnalysis) { var configurations = _projectNodeSelector.GetPlatformConfigurations(solutionProject.Project); foreach (var configuration in configurations) { var configurationPlatform = _configurationPlatformParser.GetConfigurationAndPlatform(configuration); var configurationPlatformAnalysis = projectAnalysis.GetConfigurationPlatform( configurationPlatform.configuration, configurationPlatform.platform); configurationPlatformAnalysis.WarningLevel = GetWarningLevel(configuration); configurationPlatformAnalysis.TreatWarningsAsError = GetTreatWarningsAsErrors(configuration); } }
private VisualStudioSolutionProject ResolveProject(VisualStudioSolution solution, MondopAssembly assembly) { VisualStudioSolutionProject project = solution.Projects.FirstOrDefault( x => x.Name.Equals(assembly.Name)); if (project != null) { return(project); } project = NewProject(solution, assembly.Name, Guid.Parse(VisualStudioSolutionProjectTypeIds.CsProjectGuid), "Library", assembly.Folder, assembly.Namespace, "4.6.2"); return(project); }
private void ProcessCSProjFile(string projectFile, VisualStudioSolutionProject visualStudioProject) { XDocument xDocument = XDocument.Load(projectFile); XNamespace fileNamespace = "http://schemas.microsoft.com/developer/msbuild/2003"; if (xDocument.Descendants("Project").Attributes("Sdk").Select(a => a.Value).FirstOrDefault() != null) { this.ParseNetCore(visualStudioProject, xDocument); } else { this.DetermineProjectType(visualStudioProject, xDocument, fileNamespace); this.DetermineProjectCLR(visualStudioProject, xDocument, fileNamespace); } }
public void Analyse(VisualStudioSolutionProject solutionProject, ProjectAnalysis projectAnalysis) { var configurations = _projectNodeSelector.GetPlatformConfigurations(solutionProject.Project); foreach (var configuration in configurations) { var configurationPlatform = _configurationPlatformParser.GetConfigurationAndPlatform(configuration); var configurationPlatformAnalysis = projectAnalysis.GetConfigurationPlatform( configurationPlatform.configuration, configurationPlatform.platform); configurationPlatformAnalysis.CodeAnalysisRuleSet = GetCodeAnalysisRuleSet(configuration); configurationPlatformAnalysis.RunCodeAnalysis = GetRunCodeAnalysis(configuration); configurationPlatformAnalysis.CodeAnalysisIgnoreGeneratedCode = GetCodeAnalysisIngoreGeneratedCode(configuration); } }
public VisualStudioSolutionProject NewProject(VisualStudioSolution solution, string name, Guid typeId, string outputType, string projectFolder, string rootNamespace, string targetFramework) { var solutionProject = new VisualStudioSolutionProject { Name = name, Solution = solution, FileName = _projectFileNameComposer.Compose(solution.SolutionFolder, projectFolder, name, typeId), ProjectGuid = Guid.NewGuid(), TypeGuid = typeId }; solution.Projects.Add(solutionProject); CreateProjectConfigurationPlatforms(solution, solutionProject.ProjectGuid); _projectGenerator.CreateNewProject(solutionProject, outputType, rootNamespace, targetFramework); _projectGenerator.AddBuildConfigurations(solutionProject.Project); return(solutionProject); }
public ProjectAnalysis Analyse(VisualStudioSolutionProject solutionProject) { if (solutionProject.Project == null) { _visualStudioSolutionManager.LoadProject(solutionProject); } if (CanAnalyse(solutionProject.TypeGuid)) { var result = new ProjectAnalysis { Project = solutionProject }; foreach (var analyser in _analysers) { analyser.Analyse(solutionProject, result); } return(result); } return(null); }
public void WriteProject(string fileName, VisualStudioSolutionProject project) { if (project.TypeGuid == new Guid(VisualStudioSolutionProjectTypeIds.SolutionFolderGuid)) { return; } var ms = new MemoryStream(); var settings = new XmlWriterSettings(); settings.Encoding = Encoding.UTF8; settings.Indent = true; using (var xmlWriter = XmlWriter.Create(ms, settings)) { xmlWriter.WriteStartDocument(); WriteNode(xmlWriter, project.Project.Root, project.ProjectPath); xmlWriter.WriteEndDocument(); xmlWriter.Flush(); } _fileReaderWriter.WriteFile(project.QualifiedFileName, ms); }
public void Analyse(VisualStudioSolutionProject solutionProject, ProjectAnalysis projectAnalysis) { projectAnalysis.Framework = DetectFramework(solutionProject); }