예제 #1
0
 // Project desirialization
 protected MonoDevelop.Prj2Make.Schema.Csproj.VisualStudioProject LoadPrjFromFile(string strIn)
 {
     using (FileStream fs = new FileStream(strIn, FileMode.Open)) {
         XmlSerializer xmlSer = new XmlSerializer(typeof(MonoDevelop.Prj2Make.Schema.Csproj.VisualStudioProject));
         MonoDevelop.Prj2Make.Schema.Csproj.VisualStudioProject prjObj = (MonoDevelop.Prj2Make.Schema.Csproj.VisualStudioProject)xmlSer.Deserialize(fs);
         fs.Close();
         return(prjObj);
     }
 }
예제 #2
0
        public CsprojInfo(bool isUnixMode, bool isMcsMode, string name, string guid, string csprojpath)
        {
            this.name       = name;
            this.guid       = guid;
            this.csprojpath = csprojpath;

            makename           = name.Replace('.', '_').ToUpper();
            makename_ext       = makename + "_EXT";
            m_bAllowUnsafeCode = false;

            // convert backslashes to slashes
            csprojpath = csprojpath.Replace("\\", "/");

            // loads the file in order to deserialize and
            // build the object graph
            try
            {
                FileFormat format = Services.ProjectService.FileFormats.GetFileFormatForFile(csprojpath, typeof(SolutionEntityItem));
                if (format != null && format.Id != "VS2003ProjectFileFormat")
                {
                    NeedsConversion = false;
                    return;
                }

                m_projObject = LoadPrjFromFile(csprojpath);
            }
            catch (Exception exc)
            {
                Console.WriteLine(
                    String.Format("Could not load the file {0}\nException: {1}",
                                  csprojpath,
                                  exc.ToString())
                    );
                throw;
            }

            // Establish if the allow unsafe code flag is true
            foreach (MonoDevelop.Prj2Make.Schema.Csproj.Config cf in m_projObject.CSHARP.Build.Settings.Config)
            {
                if (cf.AllowUnsafeBlocks == true)
                {
                    m_bAllowUnsafeCode = true;
                }
            }

            switch (m_projObject.CSHARP.Build.Settings.OutputType)
            {
            case "Library":
                makename_ext  = makename + "_DLL";
                assembly_name = m_projObject.CSHARP.Build.Settings.AssemblyName + ".dll";
                switches     += " -target:library";
                break;

            case "Exe":
                makename_ext  = makename + "_EXE";
                assembly_name = m_projObject.CSHARP.Build.Settings.AssemblyName + ".exe";
                switches     += " -target:exe";
                break;

            case "WinExe":
                makename_ext  = makename + "_EXE";
                assembly_name = m_projObject.CSHARP.Build.Settings.AssemblyName + ".exe";
                switches     += " -target:winexe";
                break;

            default:
                throw new NotSupportedException("Unsupported OutputType: " + m_projObject.CSHARP.Build.Settings.OutputType);
            }

            src = "";
            string basePath = Path.GetDirectoryName(csprojpath);
            string s;

            foreach (MonoDevelop.Prj2Make.Schema.Csproj.File fl in m_projObject.CSHARP.Files.Include)
            {
                if (fl.BuildAction == MonoDevelop.Prj2Make.Schema.Csproj.FileBuildAction.Compile)
                {
                    if (src != "")
                    {
                        src += " \\\n\t";
                    }

                    s = System.IO.Path.Combine(basePath, fl.RelPath);
                    s = s.Replace("\\", "/");
                    if (SlnMaker.slash != "/")
                    {
                        s = s.Replace("/", SlnMaker.slash);
                    }

                    // Test for spaces
                    if (isUnixMode == false)
                    {
                        // We are in win32 using a cmd.exe or other
                        // DOS shell
                        if (s.IndexOf(' ') > -1)
                        {
                            src += String.Format("\"{0}\"", s);
                        }
                        else
                        {
                            src += s;
                        }
                    }
                    else
                    {
                        // We are in *NIX or some other
                        // GNU like shell
                        src += s.Replace(" ", "\\ ");
                    }
                }
            }

            res = "";
            string rootNS = m_projObject.CSHARP.Build.Settings.RootNamespace;
            string relPath;

            foreach (MonoDevelop.Prj2Make.Schema.Csproj.File fl in m_projObject.CSHARP.Files.Include)
            {
                if (fl.BuildAction == MonoDevelop.Prj2Make.Schema.Csproj.FileBuildAction.EmbeddedResource)
                {
                    if (res != "")
                    {
                        res += " \\\n\t";
                    }

                    relPath = fl.RelPath.Replace("\\", "/");
                    s       = System.IO.Path.Combine(basePath, relPath);
                    s       = String.Format("-resource:{0},{1}", s, rootNS + "." + relPath.Replace("/", "."));
                    s       = s.Replace("\\", "/");
                    if (SlnMaker.slash != "/")
                    {
                        s = s.Replace("/", SlnMaker.slash);
                    }
                    res += s;
                }
            }
        }
		public CsprojInfo(bool isUnixMode, bool isMcsMode, string name, string guid, string csprojpath)
		{
			this.name = name;
			this.guid = guid;
			this.csprojpath = csprojpath;
    
			makename = name.Replace('.','_').ToUpper();
			makename_ext = makename + "_EXT";
			m_bAllowUnsafeCode = false;
    
			// convert backslashes to slashes    		
			csprojpath = csprojpath.Replace("\\", "/");

			// loads the file in order to deserialize and
			// build the object graph
			try
			{
				FileFormat format = Services.ProjectService.FileFormats.GetFileFormatForFile (csprojpath, typeof(SolutionEntityItem));
				if (format != null && format.Id != "VS2003ProjectFileFormat") {
					NeedsConversion = false;
					return;
				}
				
				m_projObject = LoadPrjFromFile (csprojpath);
			} 
			catch (Exception exc) 
			{
				Console.WriteLine (
					String.Format ("Could not load the file {0}\nException: {1}",
					csprojpath,
					exc.ToString ())
					);
				throw;
			}

			// Establish if the allow unsafe code flag is true
			foreach (MonoDevelop.Prj2Make.Schema.Csproj.Config cf in m_projObject.CSHARP.Build.Settings.Config)
			{
				if(cf.AllowUnsafeBlocks == true)
					m_bAllowUnsafeCode = true;
			}
    		
			switch (m_projObject.CSHARP.Build.Settings.OutputType)
			{
				case "Library":
					makename_ext = makename + "_DLL";
					assembly_name = m_projObject.CSHARP.Build.Settings.AssemblyName + ".dll";
					switches += " -target:library";
					break;
    
				case "Exe":
					makename_ext = makename + "_EXE";
					assembly_name = m_projObject.CSHARP.Build.Settings.AssemblyName + ".exe";
					switches += " -target:exe";
					break;
    
				case "WinExe":
					makename_ext = makename + "_EXE";
					assembly_name = m_projObject.CSHARP.Build.Settings.AssemblyName + ".exe";
					switches += " -target:winexe";
					break;
    
				default:
					throw new NotSupportedException("Unsupported OutputType: " + m_projObject.CSHARP.Build.Settings.OutputType);
    			
			}
    
			src = "";    
			string basePath = Path.GetDirectoryName(csprojpath);
			string s;
    
			foreach (MonoDevelop.Prj2Make.Schema.Csproj.File fl in m_projObject.CSHARP.Files.Include)
			{
				if(fl.BuildAction == MonoDevelop.Prj2Make.Schema.Csproj.FileBuildAction.Compile)
				{
					if (src != "")
					{
						src += " \\\n\t";
					}
	    			
					s = System.IO.Path.Combine(basePath, fl.RelPath);
					s = s.Replace("\\", "/");
					if (SlnMaker.slash != "/")
						s = s.Replace("/", SlnMaker.slash);
	
					// Test for spaces
					if (isUnixMode == false) {
						// We are in win32 using a cmd.exe or other
						// DOS shell
						if(s.IndexOf(' ') > -1) {
							src += String.Format("\"{0}\"", s);
						} else {
							src += s;
						}
					} else {
						// We are in *NIX or some other
						// GNU like shell
						src += s.Replace(" ", "\\ ");
					}
				}    			
			}
    		
			res = "";
			string rootNS = m_projObject.CSHARP.Build.Settings.RootNamespace;
			string relPath;
			foreach (MonoDevelop.Prj2Make.Schema.Csproj.File fl in m_projObject.CSHARP.Files.Include)
			{
				if(fl.BuildAction == MonoDevelop.Prj2Make.Schema.Csproj.FileBuildAction.EmbeddedResource)
				{
					if (res != "") {
						res += " \\\n\t";
					}
    			
					relPath = fl.RelPath.Replace("\\", "/");
					s = System.IO.Path.Combine(basePath, relPath);
					s = String.Format("-resource:{0},{1}", s, rootNS + "." + relPath.Replace("/", "."));
					s = s.Replace("\\", "/");
					if (SlnMaker.slash != "/")
						s = s.Replace("/", SlnMaker.slash);
					res += s;
				}
			} 		
		}