コード例 #1
0
        public Solution(string solutionFileName)
        {
            if (s_SolutionParser == null)
            {
                throw new InvalidOperationException("Can not find type 'Microsoft.Build.Construction.SolutionParser' are you missing a assembly reference to 'Microsoft.Build.dll'?");
            }

            var solutionParser = s_SolutionParser.GetConstructors(BindingFlags.Instance | BindingFlags.NonPublic).First().Invoke(null);
            var project        = new SolutionProject(solutionParser);

            project.ProjectName  = "Test";
            project.ProjectGuid  = "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}";
            project.RelativePath = "Test.csproj";

            //using (var streamReader = new StreamReader(solutionFileName))
            //{
            s_SolutionParser_solutionFile.SetValue(solutionParser, solutionFileName, null);
            s_SolutionParser_parseSolutionFile.Invoke(solutionParser, null);
            //}

            this.solutionFileName = solutionFileName;

            var types = solutionParser.GetType().Assembly.GetTypes();

            var slnTypes = types.Where(x => x.FullName.ToLower().IndexOf("solution") > 0).ToList();

            var methods = project.Object.GetType().GetMethods(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);


            projects = new ProjectCollection();
            var array = (Array)s_SolutionParser_projects.GetValue(solutionParser, null);

            for (int i = 0; i < array.Length; i++)
            {
                var projectInSolution = array.GetValue(i);
                var relativePathProp  = projectInSolution.GetType().GetProperty("RelativePath", BindingFlags.NonPublic | BindingFlags.Instance);
                var relativePath      = (string)relativePathProp.GetValue(projectInSolution, null);

                projects.LoadProject(Path.Combine(Path.GetDirectoryName(solutionFileName), relativePath));
            }

            s_SolutionParser_addProjectToSolution.Invoke(solutionParser, new object[] { project.Object });
        }
コード例 #2
0
 public void AddProject(SolutionProject project)
 {
 }