c# - 如何使用“BuildManager”从 C# 代码构建 .Net Core 应用程序?
问题描述
我想从 C# 代码构建 .Net Core 2.1 控制台应用程序。我正在使用 BuildManager 来构建解决方案。
using (var buildManager = new BuildManager())
{
var bp = new BuildParameters(projectCollection)
{
Loggers = new List<ILogger>
{
logger
},
OnlyLogCriticalEvents = false,
DetailedSummary = true,
NodeExeLocation = @"C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Professional\\MSBuild\\Current\\Bin\\MSBuild.exe"
};
var buildRequest = new BuildRequestData(
"projectFullPath",
globalProperties, null, new[] { "Build" }, null,
BuildRequestDataFlags.ReplaceExistingProjectInstance);
BuildSubmission submission = null;
buildManager.BeginBuild(bp);
submission = buildManager.PendBuildRequest(buildRequest);
buildResult = submission.Execute();
buildManager.EndBuild();
我已经设置了这样的环境变量:
Environment.SetEnvironmentVariable("MSBuildExtensionsPath", globalProperties["MSBuildExtensionsPath"]);
Environment.SetEnvironmentVariable("MSBuildFrameworkToolsPath", globalProperties["MSBuildFrameworkToolsPath"]);
Environment.SetEnvironmentVariable("MSBuildToolsPath32", globalProperties["MSBuildToolsPath32"]);
Environment.SetEnvironmentVariable("MSBuildSDKsPath", globalProperties["MSBuildSDKsPath"]);
Environment.SetEnvironmentVariable("RoslynTargetsPath", globalProperties["RoslynTargetsPath"]);
其中 globalProperties:
Path.Combine(programFilesX86, @"Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\msbuild.exe"),
Path.Combine(programFilesX86,
@"Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\MSBuild.exe"),
Path.Combine(programFilesX86, @"Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSBuild.exe"),
Path.Combine(programFilesX86, @"Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin\MSBuild.exe"),
Path.Combine(programFilesX86, @"MSBuild\14.0\Bin\MSBuild.exe"),
Path.Combine(programFilesX86, @"MSBuild\12.0\Bin\MSBuild.exe")
现在我有构建错误。
Build FAILED.
MSBUILD : warning MSB4196: The "*.overridetasks" files could not be successfully loaded from their expected location "C:\Learn\NetCoreApplicationTestingBuild\NetCoreApplicationTestingBuild\bin\Debug\netcoreapp2.1". Default tasks will not be overridden.
MSBUILD : warning MSB4010: The "*.tasks" files could not be successfully loaded from their expected location "C:\Learn\NetCoreApplicationTestingBuild\NetCoreApplicationTestingBuild\bin\Debug\netcoreapp2.1". Default tasks will not be available.
C:\Learn\NetCoreTestBuild2\NetCoreTestBuild2.sln.metaproj : error MSB4036: The "Message" task was not found. Check the following: 1.) The name of the task in the project file is the same as the name of the task class. 2.) The task class is "public" and implements the Microsoft.Build.Framework.ITask interface. 3.) The task is correctly declared with <UsingTask> in the project file, or in the *.tasks files located in the "C:\Learn\NetCoreApplicationTestingBuild\NetCoreApplicationTestingBuild\bin\Debug\netcoreapp2.1" directory.
2 Warning(s)
1 Error(s)
解决方案
我能够通过安装“Microsoft.Build.Runtime”nuget 包来解决这个问题,该包解决了丢失的 *.overridestasks 和 *.tasks 错误
推荐阅读
- machine-learning - 针对类不平衡结合重采样和特定算法
- swift - 项目 Flutter 中的错误导入框架 ios(使用 Firebase Carthage)
- java - 使用 JAVA 多行输出作为 shell 脚本中的变量
- delphi - Delphi XE8 TBindSourceDB 组件使用 MasterSource
- node.js - puppeteer/playwright:如何获得授权:承载令牌并传递给请求(例如 axios)?
- javascript - 如何忽略 contentEditable 中的 shift 键?
- java - 将以前的日期与更新日期进行比较的方法?
- python - xarray:从*本地*每月平均值计算每日异常的时间序列
- jira - Jira JQL:如何找到某个队列的最忙时间?
- python - 使用 Dash-Cytoscape 更改单个节点的大小