Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }