Ответы пользователя по тегу WPF
  • Как сделать solution explorer в С#?

    Ogoun
    @Ogoun
    Programmer
    Microsoft.Build
    Microsoft.Build.Engine.dll

    Для компиляции и работы с проектами советую использовать Microsoft.Build.Framework из nuget, он понимает синтаксис C# 7, у умеет работать с последними версиями .NET.

    Таким способом можно читать проекты из решения:
    public static void DbgReadSolution(string solution_file)
            {
                var wrapperContent = Microsoft.Build.BuildEngine.SolutionWrapperProject.
                    Generate(solution_file, toolsVersionOverride: null, projectBuildEventContext: null);
                byte[] rawWrapperContent = Encoding.Unicode.GetBytes(wrapperContent.ToCharArray());
                using (MemoryStream memStream = new MemoryStream(rawWrapperContent))
                using (XmlTextReader xmlReader = new XmlTextReader(memStream))
                {
                    var proj = ProjectCollection.GlobalProjectCollection.LoadProject(xmlReader);
                    int i = 0;
                    foreach (ProjectItem referencedProjectNode in GetOrderedProjectReferencesFromWrapper(proj))
                    {
                        Log.Info(String.Format("{0}{1}: {2}", Environment.NewLine, i++, referencedProjectNode.EvaluatedInclude));
                        string referencedProjectPath = Path.Combine(Path.GetDirectoryName(solution_file), referencedProjectNode.EvaluatedInclude);
                        var referencedProject = ProjectCollection.GlobalProjectCollection.LoadProject(referencedProjectPath);
                        Log.Info("\tReferenced Assemblies:");
                        foreach (ProjectItem referencedAssembly in GetReferencedAssemblies(referencedProject))
                        {
                            Log.Info("\t\t{0}", referencedAssembly.EvaluatedInclude);
                        }
                        Log.Info(String.Format("{0}\tSource Files:", Environment.NewLine));
                        foreach (ProjectItem includedSourceFile in GetSourceFiles(referencedProject))
                        {
                            Log.Info("\t\t{0}", includedSourceFile.EvaluatedInclude);
                        }
                    }
                    ProjectCollection.GlobalProjectCollection.UnloadAllProjects();
                }
            }
    Ответ написан
    Комментировать