Exemplo n.º 1
0
        public SolutionEntityItem CreatePrjxFromCsproj(string csprojFileName, IProgressMonitor monitor)
        {
            try {
                FileFormat format = Services.ProjectService.FileFormats.GetFileFormatForFile(csprojFileName, typeof(SolutionEntityItem));
                if (format != null && format.Id != "VS2003ProjectFileFormat")
                {
                    return((SolutionEntityItem)Services.ProjectService.ReadSolutionItem(monitor, csprojFileName));
                }

                MonoDevelop.Prj2Make.Schema.Csproj.VisualStudioProject csprojObj = null;

                monitor.BeginTask(GettextCatalog.GetString("Importing project: ") + csprojFileName, 4);

                DotNetAssemblyProject prjxObj = new DotNetAssemblyProject("C#", null, null);

                prjxFileName = String.Format("{0}.mdp",
                                             Path.Combine(Path.GetDirectoryName(csprojFileName),
                                                          Path.GetFileNameWithoutExtension(csprojFileName))
                                             );

                // Load the csproj
                using (TextFileReader fsIn = new TextFileReader(csprojFileName)) {
                    XmlSerializer xmlDeSer = new XmlSerializer(typeof(VisualStudioProject));
                    csprojObj = (VisualStudioProject)xmlDeSer.Deserialize(fsIn);
                }

                monitor.Step(1);

                // Begin prjxObj population
                prjxObj.FileName         = prjxFileName;
                prjxObj.Name             = Path.GetFileNameWithoutExtension(csprojFileName);
                prjxObj.Description      = "";
                prjxObj.NewFileSearch    = NewFileSearch.None;
                prjxObj.DefaultNamespace = csprojObj.CSHARP.Build.Settings.RootNamespace;

                GetContents(prjxObj, csprojObj.CSHARP.Files.Include, prjxObj.Files, monitor);
                monitor.Step(1);

                GetReferences(prjxObj, csprojObj.CSHARP.Build.References, prjxObj.References, monitor);
                monitor.Step(1);

                prjxObj.Configurations.Clear();
                foreach (Config cblock in csprojObj.CSHARP.Build.Settings.Config)
                {
                    prjxObj.Configurations.Add(CreateConfigurationBlock(
                                                   prjxObj,
                                                   cblock,
                                                   csprojObj.CSHARP.Build.Settings.AssemblyName,
                                                   csprojObj.CSHARP.Build.Settings.OutputType,
                                                   monitor
                                                   ));
                }
                monitor.Step(1);
                return(prjxObj);
            } catch (Exception ex) {
                monitor.ReportError(GettextCatalog.GetString("Could not import project:") + csprojFileName, ex);
                throw;
            } finally {
                monitor.EndTask();
            }
        }