При попытке создать проект с использованием API MSBuild возникла следующая ошибка.
D: \ Visual Studio \ 2017 \ MSBuild \ 15.0 \ Bin \ Microsoft.Common.CurrentVersion.targets (753,5) (MSBuild): не удалось загрузить задачу «Microsoft.Build.Tasks.Message» из сборка Microsoft.Build.Tasks.Core, версия = 15.1.0.0, культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a. Не удалось загрузить файл или сборку «Microsoft.Build.Tasks.Core, версия = 15.1.0.0, Culture = нейтральный, PublicKeyToken = b03f5f7f11d50a3a» или одну из ее зависимостей. Система не может найти указанный файл. Убедитесь, что объявление правильное, что сборка и все ее зависимости доступны и что задача содержит открытый класс, реализующий Microsoft.Build.Framework.ITask.
Я установил последние версии MSBuild, используя Nuget
Microsoft.Build v15.6.85
Я использую .NET Framework 4.6, я пытался установить инструменты сборки, даже если у меня уже установлена Visual Studio. Я пробовал решения, предложенные в этой теме https://github.com/Microsoft/msbuild/issues/2369, к сожалению, я не смог построить свои проекты.
После я встраиваю код моего строителя.
public class DotNetApplicationBuilder : IApplicationBuilderService
{
public IBuildLogger BuildLog { get; set; }
public string BuildPath { get; set; }
public bool BuildSuccessful { get; set; }
public DotNetApplicationBuilder(IBuildLogger buildLogger)
{
BuildLog = buildLogger;
}
public void BuildApplication()
{
BuildLog.LogInformation("Application Builder: Starting to build App");
//Environment.SetEnvironmentVariable("VSINSTALLDIR", @"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community");
//Environment.SetEnvironmentVariable("VSINSTALLDIR", @"C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools");
//Environment.SetEnvironmentVariable("VisualStudioVersion", @"15.0");
Environment.SetEnvironmentVariable("MSBUILD_EXE_PATH", @"C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin\MSBuild.exe");
ProjectCollection pc = new ProjectCollection();
Dictionary<string, string> GlobalProperty = new Dictionary<string, string>();
GlobalProperty.Add("Configuration", "Release");
GlobalProperty.Add("Platform", "AnyCPU");
//GlobalProperty.Add("OutputPath", Pu);//@"D:\Proyectos\Middleware\Publish"+ @"\" + dirName); //
//GlobalProperty.Add("VSINSTALLDIR", @"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community");
GlobalProperty.Add("VisualStudioVersion", @"15.0");
////GlobalProperty.Add("DeployOnBuild", "true");
//GlobalProperty.Add("DeleteExistingFiles", "true");
//GlobalProperty.Add("WebPublishMethod", "FileSystem");
//GlobalProperty.Add("publishUrl", publishPath);
//temporaryPath = temporaryPath + $"\\_PublishedWebsites\\{dirName}";
BuildParameters bp = new BuildParameters(pc);
var logger = new ProjectBuilderLogger(BuildLog);
bp.Loggers = new List<Microsoft.Build.Framework.ILogger> { logger }.AsEnumerable();
BuildManager.DefaultBuildManager.BeginBuild(bp);
BuildRequestData BuildRequest = new BuildRequestData(BuildPath, GlobalProperty, null, new string[] { "Clean", "Build" }, null);
BuildSubmission BuildSubmission = BuildManager.DefaultBuildManager.PendBuildRequest(BuildRequest);
BuildSubmission.Execute();
BuildManager.DefaultBuildManager.EndBuild();
BuildSuccessful = BuildSubmission.BuildResult.OverallResult == BuildResultCode.Success;
BuildLog.LogInformation($"Application Builder: Finished building app. Build Successful {BuildSuccessful}");
}
public bool WasBuildSuccessful()
{
return BuildSuccessful;
}
public void SetBuildPath(string path)
{
BuildPath = path;
}
public void SetBuildLogger(IBuildLogger logger)
{
BuildLog = logger;
}
}
Спасибо за любую подсказку или решение, которое вы можете предоставить.