private static void DigestBuildProperties(Project project, ProjectDigest projectDigest) { foreach (BuildPropertyGroup buildPropertyGroup in project.PropertyGroups) { foreach (BuildProperty buildProperty in buildPropertyGroup) { if (!buildProperty.IsImported) { if ("RootNameSpace".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.RootNamespace = buildProperty.Value; } else if ("AssemblyName".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.AssemblyName = buildProperty.Value; } else if ("Name".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.Name = buildProperty.Value; } else if ("StartupObject".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.StartupObject = buildProperty.Value; } else if ("OutputType".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.OutputType = buildProperty.Value; } else if ("RoleType".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.RoleType = buildProperty.Value; } else if ("SignAssembly".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.SignAssembly = buildProperty.Value; } else if ("AssemblyOriginatorKeyFile".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.AssemblyOriginatorKeyFile = buildProperty.Value; } else if ("DelaySign".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.DelaySign = buildProperty.Value; } else if ("Optimize".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.Optimize = buildProperty.Value; } else if ("AllowUnsafeBlocks".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.AllowUnsafeBlocks = buildProperty.Value; } else if ("DefineConstants".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.DefineConstants = buildProperty.Value; } else if ("ApplicationIcon".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.ApplicationIcon = buildProperty.Value; } else if ("Win32Resource".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.Win32Resource = buildProperty.Value; } else if ("ProjectGuid".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.ProjectGuid = buildProperty.Value; } else if ("Configuration".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.Configuration = buildProperty.Value; } else if ("BaseIntermediateOutputPath".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.BaseIntermediateOutputPath = buildProperty.Value; } else if ("OutputPath".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.OutputPath = buildProperty.Value; } else if ("TreatWarningsAsErrors".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.TreatWarningsAsErrors = buildProperty.Value; } else if ("Platform".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.Platform = buildProperty.Value; } else if ("ProductVersion".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.ProductVersion = buildProperty.Value; } else if ("SchemaVersion".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.SchemaVersion = buildProperty.Value; } else if ("TargetFrameworkVersion".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { // changed the version to the more specific version string frameworkVersion = buildProperty.Value.Substring(1); if ("2.0".Equals(buildProperty.Value.Substring(1))) { frameworkVersion = "2.0.50727"; } projectDigest.TargetFramework = frameworkVersion; } else if ("AppDesignerFolder".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.AppDesignerFolder = buildProperty.Value; } else if ("DebugSymbols".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.DebugSymbols = buildProperty.Value; } else if ("DebugType".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.DebugType = buildProperty.Value; } else if ("ErrorReport".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.ErrorReport = buildProperty.Value; } else if ("WarningLevel".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.WarningLevel = buildProperty.Value; } else if ("DocumentationFile".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.DocumentationFile = buildProperty.Value; } else if ("PostBuildEvent".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.PostBuildEvent = buildProperty.Value; } else if ("PublishUrl".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.PublishUrl = buildProperty.Value; } else if ("Install".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.Install = buildProperty.Value; } else if ("InstallFrom".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.InstallFrom = buildProperty.Value; } else if ("UpdateEnabled".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.UpdateEnabled = buildProperty.Value; } else if ("UpdateMode".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.UpdateMode = buildProperty.Value; } else if ("UpdateInterval".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.UpdateInterval = buildProperty.Value; } else if ("UpdateIntervalUnits".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.UpdateIntervalUnits = buildProperty.Value; } else if ("UpdatePeriodically".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.UpdatePeriodically = buildProperty.Value; } else if ("UpdateRequired".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.UpdateRequired = buildProperty.Value; } else if ("MapFileExtensions".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.MapFileExtensions = buildProperty.Value; } else if ("ApplicationVersion".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.ApplicationVersion = buildProperty.Value; } else if ("IsWebBootstrapper".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.IsWebBootstrapper = buildProperty.Value; } else if ("BootstrapperEnabled".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.BootstrapperEnabled = buildProperty.Value; } else if ("PreBuildEvent".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.PreBuildEvent = buildProperty.Value; } else if ("MyType".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.MyType = buildProperty.Value; } else if ("DefineDebug".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.DefineDebug = buildProperty.Value; } else if ("DefineTrace".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.DefineTrace = buildProperty.Value; } else if ("NoWarn".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.NoWarn = buildProperty.Value; } else if ("WarningsAsErrors".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.WarningsAsErrors = buildProperty.Value; } else if ("ProjectTypeGuids".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { if (!string.IsNullOrEmpty(buildProperty.Value)) { try { VisualStudioProjectTypeEnum t = VisualStudioProjectType.GetVisualStudioProjectType(buildProperty.Value); projectDigest.ProjectType = t; } catch { throw; } } } else { Console.WriteLine("Unhandled Property:" + buildProperty.Name); } } } } }
private static void processProperty(ProjectDigest projectDigest, BuildProperty buildProperty) { if ("RootNameSpace".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.RootNamespace = buildProperty.Value; } else if ("AssemblyName".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.AssemblyName = buildProperty.Value; } else if ("Name".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.Name = buildProperty.Value; } else if ("StartupObject".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.StartupObject = buildProperty.Value; } else if ("OutputType".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.OutputType = buildProperty.Value; } else if ("HostInBrowser".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.HostInBrowser = bool.Parse(buildProperty.Value); } else if ("SilverlightVersion".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.SilverlightVersion = buildProperty.Value.Replace("$(TargetFrameworkVersion)", projectDigest.TargetFrameworkVersion); // BusinessApplication template doesn't set the target framework identifier, which we need to find the right things later projectDigest.TargetFrameworkIdentifier = "Silverlight"; } else if ("SilverlightApplication".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.SilverlightApplication = bool.Parse(buildProperty.Value); } else if ("SilverlightApplicationList".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.SilverlightApplicationList = SilverlightApplicationReference.parseApplicationList(buildProperty.Value); } else if ("RoleType".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.RoleType = buildProperty.Value; } else if ("SignAssembly".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.SignAssembly = buildProperty.Value; } else if ("AssemblyOriginatorKeyFile".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.AssemblyOriginatorKeyFile = buildProperty.Value; } else if ("DelaySign".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.DelaySign = buildProperty.Value; } else if ("Optimize".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.Optimize = buildProperty.Value; } else if ("AllowUnsafeBlocks".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.AllowUnsafeBlocks = buildProperty.Value; } else if ("DefineConstants".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.DefineConstants = buildProperty.Value; } else if ("ApplicationIcon".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.ApplicationIcon = buildProperty.Value; } else if ("Win32Resource".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.Win32Resource = buildProperty.Value; } else if ("ProjectGuid".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.ProjectGuid = buildProperty.Value; } else if ("Configuration".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.Configuration = buildProperty.Value; } else if ("BaseIntermediateOutputPath".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.BaseIntermediateOutputPath = buildProperty.Value; } else if ("OutputPath".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.OutputPath = buildProperty.Value; } else if ("TreatWarningsAsErrors".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.TreatWarningsAsErrors = buildProperty.Value; } else if ("Platform".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.Platform = buildProperty.Value; } else if ("ProductVersion".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.ProductVersion = buildProperty.Value; } else if ("SchemaVersion".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.SchemaVersion = buildProperty.Value; } else if ("TargetFrameworkIdentifier".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.TargetFrameworkIdentifier = buildProperty.Value; } else if ("TargetFrameworkProfile".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.TargetFrameworkProfile = buildProperty.Value; } else if ("TargetFrameworkVersion".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase) && projectDigest.TargetFramework == null) { // Raw value from project projectDigest.TargetFrameworkVersion = buildProperty.Value; // changed the version to the more specific version string frameworkVersion = buildProperty.Value.Substring(1); if ("2.0".Equals(frameworkVersion)) { frameworkVersion = "2.0.50727"; } projectDigest.TargetFramework = frameworkVersion; } else if ("AppDesignerFolder".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.AppDesignerFolder = buildProperty.Value; } else if ("DebugSymbols".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.DebugSymbols = buildProperty.Value; } else if ("DebugType".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.DebugType = buildProperty.Value; } else if ("ErrorReport".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.ErrorReport = buildProperty.Value; } else if ("WarningLevel".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.WarningLevel = buildProperty.Value; } else if ("DocumentationFile".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.DocumentationFile = buildProperty.Value; } else if ("PostBuildEvent".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.PostBuildEvent = buildProperty.Value; } else if ("PublishUrl".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.PublishUrl = buildProperty.Value; } else if ("Install".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.Install = buildProperty.Value; } else if ("InstallFrom".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.InstallFrom = buildProperty.Value; } else if ("UpdateEnabled".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.UpdateEnabled = buildProperty.Value; } else if ("UpdateMode".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.UpdateMode = buildProperty.Value; } else if ("UpdateInterval".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.UpdateInterval = buildProperty.Value; } else if ("UpdateIntervalUnits".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.UpdateIntervalUnits = buildProperty.Value; } else if ("UpdatePeriodically".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.UpdatePeriodically = buildProperty.Value; } else if ("UpdateRequired".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.UpdateRequired = buildProperty.Value; } else if ("MapFileExtensions".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.MapFileExtensions = buildProperty.Value; } else if ("ApplicationVersion".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.ApplicationVersion = buildProperty.Value; } else if ("IsWebBootstrapper".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.IsWebBootstrapper = buildProperty.Value; } else if ("BootstrapperEnabled".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.BootstrapperEnabled = buildProperty.Value; } else if ("PreBuildEvent".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.PreBuildEvent = buildProperty.Value; } else if ("MyType".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.MyType = buildProperty.Value; } else if ("DefineDebug".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.DefineDebug = buildProperty.Value; } else if ("DefineTrace".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.DefineTrace = buildProperty.Value; } else if ("NoWarn".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.NoWarn = buildProperty.Value; } else if ("WarningsAsErrors".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { projectDigest.WarningsAsErrors = buildProperty.Value; } else if ("ProjectTypeGuids".Equals(buildProperty.Name, StringComparison.OrdinalIgnoreCase)) { if (!string.IsNullOrEmpty(buildProperty.Value)) { projectDigest.ProjectType = VisualStudioProjectType.GetVisualStudioProjectType(buildProperty.Value); } } else { log.Debug("Unhandled Property:" + buildProperty.Name); } }
public List <Dictionary <string, object> > Parse(FileInfo solutionFile, Dictionary <string, string> globalProperties, ref string warningMsg) { NPanday.ProjectImporter.Parser.SlnParser.Model.Solution solution; List <Dictionary <string, object> > list = new List <Dictionary <string, object> >(); try { solution = SolutionFactory.GetSolution(solutionFile); } catch (Exception exception) { throw new Exception("Unknown error occurred parsing solution file: " + solutionFile + " (embedded error is: \"" + exception.Message + "\")"); } String UnsupportedProjectsMessage = string.Empty; foreach (NPanday.ProjectImporter.Parser.SlnParser.Model.Project project in solution.Projects) { Dictionary <string, object> dictionary = new Dictionary <string, object>(); string fullpath = Path.Combine(solutionFile.DirectoryName, project.ProjectPath); VisualStudioProjectTypeEnum type; try { // Skip folders // TODO: merge with method in VS Add-in if (project.ProjectTypeGUID.Equals("{66A26720-8FB5-11D2-AA7E-00C04F688DDE}", StringComparison.OrdinalIgnoreCase) || project.ProjectTypeGUID.Equals("{2150E333-8FDC-42A3-9474-1A3956D46DE8}", StringComparison.OrdinalIgnoreCase)) { continue; } else { type = VisualStudioProjectType.GetVisualStudioProjectType(project.ProjectTypeGUID); } } catch (Exception e) { log.ErrorFormat("Error reading project with type GUID {0}: {1}", project.ProjectTypeGUID, e.Message); if (string.Empty.Equals(UnsupportedProjectsMessage)) { UnsupportedProjectsMessage += project.ProjectName; } else { UnsupportedProjectsMessage += ", " + project.ProjectName; } continue; } dictionary.Add("ProjectType", type); dictionary.Add("ProjectTypeGuid", project.ProjectTypeGUID); dictionary.Add("ProjectName", project.ProjectName); dictionary.Add("ProjectPath", project.ProjectPath); dictionary.Add("ProjectGUID", project.ProjectGUID); dictionary.Add("ProjectFullPath", fullpath); // this is for web projects if ((VisualStudioProjectTypeEnum)dictionary["ProjectType"] == VisualStudioProjectTypeEnum.Web_Site) { string[] assemblies = GetWebConfigAssemblies(Path.Combine(fullpath, "web.config")); dictionary.Add("WebConfigAssemblies", assemblies); //get project target framework if available if (project.ProjectSections.Count > 0) { if (project.ProjectSections[0].Map.ContainsKey("TargetFramework")) { dictionary.Add("TargetFramework", project.ProjectSections[0].Map["TargetFramework"]); } } //@001 SERNACIO START retrieving webreference Digest.Model.WebReferenceUrl[] webReferences = getWebReferenceUrls(fullpath); dictionary.Add("WebReferencesUrl", webReferences); //@001 SERNACIO END retrieving webreference string[] binAssemblies = GetBinAssemblies(Path.Combine(fullpath, @"bin")); dictionary.Add("BinAssemblies", binAssemblies); //ParseInnerData(dictionary, match.Groups["projectInnerData"].ToString()); ParseProjectReferences(dictionary, project, solution); } // this is for normal projects else { Microsoft.Build.BuildEngine.Project prj = new Microsoft.Build.BuildEngine.Project(BUILD_ENGINE); try { // TODO: if we update to a .NET 3.5 minimum we can pass in ProjectLoadSettings.IgnoreMissingImports, and ignore the visualstudioversion if (globalProperties != null) { foreach (KeyValuePair <string, string> entry in globalProperties) { prj.GlobalProperties.SetProperty(entry.Key, entry.Value); } } // Some debugging to troubleshoot an infrequent error where Microsoft.Build throws a NullReferenceException. // This may have been mitigated by setting VisualStudioVersion and can be removed if the problem doesn't re-appear. if (log.IsDebugEnabled) { log.DebugFormat("VisualStudioVersion: global {0}, evaluated {1}", prj.GlobalProperties["VisualStudioVersion"], prj.EvaluatedProperties["VisualStudioVersion"]); log.DebugFormat("CloudExtensionsDir: global {0}, evaluated {1}", prj.GlobalProperties["CloudExtensionsDir"], prj.EvaluatedProperties["CloudExtensionsDir"]); log.DebugFormat("MSBuildExtensionsPath: global {0}, evaluated {1}", prj.GlobalProperties["MSBuildExtensionsPath"], prj.EvaluatedProperties["MSBuildExtensionsPath"]); } prj.Load(fullpath); } catch (NullReferenceException e) { log.Error("Error reading project from path " + fullpath, e); // workaround it by removing the imports prj.LoadXml(TransformProjectFile(fullpath)); prj.FullFileName = fullpath; } catch (Exception e) { log.Error("Error reading project from path " + fullpath, e); if (string.Empty.Equals(UnsupportedProjectsMessage)) { UnsupportedProjectsMessage += project.ProjectName; } else { UnsupportedProjectsMessage += ", " + project.ProjectName; } continue; } //ParseInnerData(dictionary, match.Groups["projectInnerData"].ToString()); ParseProjectReferences(dictionary, project, solution); dictionary.Add("Project", prj); } list.Add(dictionary); } if (!string.Empty.Equals(UnsupportedProjectsMessage)) { warningMsg = string.Format("{0}\n Unsupported Projects: {1}", warningMsg, UnsupportedProjectsMessage); } return(list); }
public List <Dictionary <string, object> > Parse(FileInfo solutionFile, ref string warningMsg) { NPanday.ProjectImporter.Parser.SlnParser.Model.Solution solution; List <Dictionary <string, object> > list = new List <Dictionary <string, object> >(); try { solution = SolutionFactory.GetSolution(solutionFile); } catch (Exception exception) { throw new Exception("Unknown error occurred parsing solution file: " + solutionFile + " (embedded error is: \"" + exception.Message + "\")"); } String UnsupportedProjectsMessage = string.Empty; foreach (NPanday.ProjectImporter.Parser.SlnParser.Model.Project project in solution.Projects) { Dictionary <string, object> dictionary = new Dictionary <string, object>(); string fullpath = Path.Combine(solutionFile.DirectoryName, project.ProjectPath); VisualStudioProjectTypeEnum type; try { type = VisualStudioProjectType.GetVisualStudioProjectType(project.ProjectTypeGUID); } catch (Exception) { if (string.Empty.Equals(UnsupportedProjectsMessage)) { UnsupportedProjectsMessage += project.ProjectName; } else { UnsupportedProjectsMessage += ", " + project.ProjectName; } continue; } dictionary.Add("ProjectType", type); dictionary.Add("ProjectTypeGuid", project.ProjectTypeGUID); dictionary.Add("ProjectName", project.ProjectName); dictionary.Add("ProjectPath", project.ProjectPath); dictionary.Add("ProjectGUID", project.ProjectGUID); dictionary.Add("ProjectFullPath", fullpath); // this is for web projects if ((VisualStudioProjectTypeEnum)dictionary["ProjectType"] == VisualStudioProjectTypeEnum.Web_Site) { string[] assemblies = GetWebConfigAssemblies(Path.Combine(fullpath, "web.config")); dictionary.Add("WebConfigAssemblies", assemblies); //get project target framework if available if (project.ProjectSections.Count > 0) { if (project.ProjectSections[0].Map.ContainsKey("TargetFramework")) { dictionary.Add("TargetFramework", project.ProjectSections[0].Map["TargetFramework"]); } } //@001 SERNACIO START retrieving webreference Digest.Model.WebReferenceUrl[] webReferences = getWebReferenceUrls(fullpath); dictionary.Add("WebReferencesUrl", webReferences); //@001 SERNACIO END retrieving webreference string[] binAssemblies = GetBinAssemblies(Path.Combine(fullpath, @"bin")); dictionary.Add("BinAssemblies", binAssemblies); //ParseInnerData(dictionary, match.Groups["projectInnerData"].ToString()); ParseProjectReferences(dictionary, project, solution); } // this is for normal projects else { Microsoft.Build.BuildEngine.Project prj = new Microsoft.Build.BuildEngine.Project(BUILD_ENGINE); prj.Load(fullpath); //ParseInnerData(dictionary, match.Groups["projectInnerData"].ToString()); ParseProjectReferences(dictionary, project, solution); dictionary.Add("Project", prj); } list.Add(dictionary); } if (!string.Empty.Equals(UnsupportedProjectsMessage)) { warningMsg = string.Format("{0}\n Unsupported Projects: {1}", warningMsg, UnsupportedProjectsMessage); } return(list); }