【问题标题】:How to programmatically compile .net core 3.1 application?如何以编程方式编译 .net core 3.1 应用程序?
【发布时间】:2020-03-20 19:21:39
【问题描述】:

有没有办法在 .NET Core 3.1 中从控制台应用程序编译 WebAPI 应用程序?

我尝试了很多不同的方法,例如:

1.

var collection = ProjectCollection.GlobalProjectCollection;
var project = collection.LoadProject($@"{path}\Project.csproj");
project.SetProperty("Configuration", configuration);
project.Build();

(.sln 的路径)

错误:MSB4041:项目的默认 XML 命名空间必须是 MSBuild XML 命名空间。

2.

new Microsoft.Build.Execution.ProjectInstance("PathToProject.sln").Build();

(.sln 的路径)

错误:Microsoft.Build.Exceptions.InvalidProjectFileException:'无法加载项目文件。根级数据无效。

(.csproj 的路径)

错误:Microsoft.Build.Exceptions.InvalidProjectFileException:找不到指定的“SDK 'Microsoft.NET.Sdk.Web'。
3.

ProjectCollection pc = new ProjectCollection();

Dictionary<string, string> GlobalProperty = new Dictionary<string, string>();
GlobalProperty.Add("Configuration", "Debug");
GlobalProperty.Add("Platform", "Any CPU");
GlobalProperty.Add("OutputPath", Directory.GetCurrentDirectory() + "\\MyOutput");

BuildParameters bp = new BuildParameters(pc);

BuildManager.DefaultBuildManager.BeginBuild(bp);
BuildRequestData BuildRequest = new BuildRequestData(projectFilePath, 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();
}

(.sln 和 .csproj 的路径)

错误:构建结果失败,没有报告异常

但是,这些方法都不起作用。 因此,我想知道是否可以编译 .NET Core 3.1 WebAPI 代码?

【问题讨论】:

  • 什么did not work?你面临的问题是什么?您是否尝试过从代码中运行 dotnet build 命令?
  • 对我来说,调用 dotnet build 可以,但在服务器上运行需要 15 分钟。它在本地非常快,因此它可能对您有用。我创建了一个 new Process 及其 StartInfo = "dotnet"Arguments = $"build {solutionFilePath} --configfile {nugetConfigPath} --nologo --verbosity minimal"

标签: c# asp.net-core compilation .net-core-3.1


【解决方案1】:

我可以让它工作的唯一方法是使用以下代码 sn-p (.NET 6):

var commandText = $"myProject.csproj";
p.StartInfo = new ProcessStartInfo(@"C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\Bin\msbuild.exe", commandText);
p.StartInfo.WorkingDirectory = projectFileLocation;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.RedirectStandardOutput = true;
p.Start();

while (!p.StandardOutput.EndOfStream)
{
    var line = p.StandardOutput.ReadLine();
    sb.Append(line);
}

p.WaitForExit();

我希望这可以为人们节省更多时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    相关资源
    最近更新 更多