Не знаю, что еще нужно сделать, чтобы обойти эту ошибку. Я пытаюсь скомпилировать другой проект - 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);
}
}