首页 > 解决方案 > 如何以编程方式使用 MSBuild 构建 DotNet Core 项目

问题描述

我想构建 .Net Core 3.1 解决方案,该解决方案具有 API 项目和 Businesslayer 以及来自 C# 代码的另外 2 层。我正在使用 BuildManager 来构建解决方案。

        string projectFileName = @"D:\SampleUserApplication\SampleUserApplication.sln";
        ProjectCollection pc = new ProjectCollection();
        Dictionary<string, string> GlobalProperty = new Dictionary<string, string>();
        GlobalProperty.Add("Configuration", "Release");
        GlobalProperty.Add("Platform", "Any CPU");
        GlobalProperty.Add("OutputPath", solution_name);
        //GlobalProperty.Add("MSBuildExtensionsPath", msbuildRoot);

        BuildParameters bp = new BuildParameters(pc);
        bp.Loggers = new[] {
        new FileLogger
        {
           Verbosity = LoggerVerbosity.Detailed,
           ShowSummary = true,
           SkipProjectStartedText = true
        }
        };

        BuildManager.DefaultBuildManager.BeginBuild(bp);

        BuildRequestData BuildRequest = new BuildRequestData(projectFileName, GlobalProperty, null, new string[] { "Build" }, null);

        BuildSubmission BuildSubmission = BuildManager.DefaultBuildManager.PendBuildRequest(BuildRequest);
        BuildSubmission.Execute();
        BuildManager.DefaultBuildManager.EndBuild();
        if (BuildSubmission.BuildResult.OverallResult == BuildResultCode.Failure)
        {
            //throw new Exception();
        }

但是构建失败并出现以下错误:

MSBUILD:警告 MSB4196:无法从预期位置“D:\NOCodeRespository\NoCode\NoCode\NoCodeAPI\bin\Debug\netcoreapp3.1”成功加载“.overridetasks”文件。默认任务不会被覆盖。
MSBUILD:警告 MSB4010:
无法从预期位置“D:\NOCodeRespository\NoCode\NoCode\NoCodeAPI\bin\Debug\netcoreapp3.1”成功加载“.tasks”文件。默认任务将不可用。D:\SampleUserApplication\SampleUserApplication.sln.metaproj :
错误 MSB4036:未找到“消息”任务。检查以下内容: 1.) 项目文件中的任务名称与任务类的名称相同。2.) 任务类是“公共的”并且实现了 Microsoft.Build.Framework.ITask 接口。3.) 在项目文件或位于“D:\NOCodeRespository\NoCode\NoCode\NoCodeAPI\bin\Debug\netcoreapp3.1”目录中的 *.tasks 文件中正确声明了任务。在项目“SampleUserApplication.sln”中完成构建目标“ValidateSolutionConfiguration”——失败。完成构建项目“SampleUserApplication.sln”——失败。构建失败。

我尝试添加环境变量,例如:

        var msbuildRoot = @"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild";
        // var msbuildExe = Path.Combine(msbuildRoot, @"19.0\Bin\MsBuild.exe");
        var sdkPath = Path.Combine(msbuildRoot, "Sdks");
        //Environment.SetEnvironmentVariable("MSBUILD_EXE_PATH", msbuildExe);
        Environment.SetEnvironmentVariable("MSBUILDSDKSPATH", sdkPath);
        Environment.SetEnvironmentVariable("MSBuildExtensionsPath", msbuildRoot);

最后

        GlobalProperty.Add("MSBuildExtensionsPath", msbuildRoot);

但没有任何结果。经过长时间的谷歌搜索,我也没有找到任何解决方案。我希望有人对此有解决方案。

标签: c#.net-corebuildmsbuild

解决方案


推荐阅读