Как построить динамические проекты, используя c# с классом ProjectCollection без сбоев? - PullRequest
0 голосов
/ 16 апреля 2020

Не знаю, что еще нужно сделать, чтобы обойти эту ошибку. Я пытаюсь скомпилировать другой проект - net framework c# из моего проекта VS2019 c# (оба являются быстрыми примерами проекта), я столкнулся с этой ошибкой ...

"C : \ Users \ myuser \ source \ repos \ AppToBuild \ AppToBuild.sln.metaproj: ошибка MSB4060: Задача \ "Message \" была объявлена ​​или использовалась неправильно или не выполнена во время построения. Проверьте правильность имени задачи и сборки. имя. "

У меня есть msbuild tolset 14.0 C: \ Program Files (x86) \ Справочные сборки \ Microsoft \ MSBuild \ v14.0

Может кто-нибудь помочь мне исправить это? Может ли кто-нибудь предоставить мне полный пример того, как динамически создавать другие проекты с использованием проекта c#? убедитесь, что вы проверили это, так как большинство образцов на inte rnet не работает.

ОБРАЗЕЦ МОЕГО ПРОЕКТА:

            //retrieve assembly execution path
        string assemblyExecutionPath = System.Reflection.Assembly.GetExecutingAssembly().Location;
        string logFilePath = assemblyExecutionPath.Remove(assemblyExecutionPath.LastIndexOf("\\") + 1) + "build.log";
     //   Let’s create a collection to hold the output 
       var  OutputHeaderRow = new List<string>();
       var  OutputItemRow = new List<string>();
        //  Let’s say the path of the solution to build using C# code is present in following variable -
        string artifactPath = @"C:\Users\myuser\source\repos\AppToBuild\AppToBuild.sln";
      //  Following is the remaining complete code 

            try
        {
            // Instantiate a new FileLogger to generate build log
            FileLogger logger = new FileLogger();

            // Set the logfile parameter to indicate the log destination
            logger.Parameters = @"logfile=" + logFilePath;

            ProjectCollection pc = new ProjectCollection();

            Dictionary<string, string> GlobalProperty = new Dictionary<string, string>();
            GlobalProperty.Add("Configuration", "Debug");
            GlobalProperty.Add("Platform", "Any CPU");

            BuildRequestData buildRequest = new BuildRequestData(artifactPath, GlobalProperty, "14.0", new string[] { "Build" }, null);

            //register file logger using BuildParameters
            BuildParameters bp = new BuildParameters(pc);
            bp.Loggers = new List<Microsoft.Build.Framework.ILogger> { logger }.AsEnumerable();

            //build solution
            BuildResult buildResult = BuildManager.DefaultBuildManager.Build(bp, buildRequest);

            //Unregister all loggers to close the log file               
            pc.UnregisterAllLoggers();

            //read lines from log file having project build output details
            string[] solutionBuildOutputs = File.ReadAllLines(logFilePath);

            //write the result of solution build to html report
            OutputHeaderRow.Add("Artifact;Build Result");

            //split the contents of logger file to retrieve project build details
            string[] splitter = { "__________________________________________________" };
            string loggerOutput = File.ReadAllText(logFilePath);
            string[] projectResults = loggerOutput.Split(splitter, StringSplitOptions.None);
            foreach (string projectBuildDetails in projectResults)
            {
                if (projectBuildDetails.Contains("(default targets):"))
                {
                    if (projectBuildDetails.Contains("Done building project \""))
                    {
                        //write the result of failed projects build to html report
                        string[] lines = projectBuildDetails.Split("\n".ToCharArray());
                        string buildFailedProjectName = lines.Where(x => x.Contains("Done building project \"")).FirstOrDefault();
                        buildFailedProjectName = buildFailedProjectName.Replace("Done building project ", string.Empty).Trim();
                        buildFailedProjectName = buildFailedProjectName.Replace("\"", string.Empty);
                        buildFailedProjectName = buildFailedProjectName.Replace(" -- FAILED.", string.Empty);
                        OutputItemRow.Add(buildFailedProjectName + ";FAILED");
                    }
                    else
                    {
                        //write the result of successfully built projects to html report
                        string[] lines = projectBuildDetails.Split("\n".ToCharArray());
                        string buildSuccededProjectName = lines.Where(x => x.Contains(" (default targets):")).FirstOrDefault().Replace("\" (default targets):", "");
                        string finalProjectName = buildSuccededProjectName.Substring(buildSuccededProjectName.LastIndexOf("\\") + 1);
                        OutputItemRow.Add(finalProjectName + ";SUCCEEDED");
                    }
                }
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            //delete log file
            File.Delete(logFilePath);
        }
    }
...