首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Microsoft.Build API构建项目

使用Microsoft.Build API构建项目
EN

Stack Overflow用户
提问于 2017-05-29 19:28:30
回答 3查看 4.1K关注 0票数 11

我正在尝试使用Microsoft.Build中的类构建一个项目。

守则是:

代码语言:javascript
复制
var project = new ProjectInstance(CS_PROJ_FILE);
project.Build();

但是,它会引发以下异常:

代码语言:javascript
复制
Microsoft.Build.Shared.InternalErrorException occurred
  HResult=0x80131500
  Message=MSB0001: Internal MSBuild Error: Type information for Microsoft.Build.Utilities.ToolLocationHelper was present in the whitelist cache as Microsoft.Build.Utilities.ToolLocationHelper, Microsoft.Build.Utilities.Core, Version=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a but the type could not be loaded. unexpectedly null
  Source=Microsoft.Build

我尝试将以下内容添加到包中(包括在net452和net7项目中):

  • id="Microsoft.Build“version="15.1.1012”
  • id="Microsoft.Build.Framework“version="15.1.1012”
  • id="Microsoft.Build.Runtime“version="15.1.1012”
  • id="Microsoft.Build.Tasks.Core“version="15.1.1012”
  • id="Microsoft.Build.Utilities.Core“version="15.1.1012”

结果还是一样的。

我也尝试过像这样使用BuildManager

代码语言:javascript
复制
var buildManager = new BuildManager();
buildManager.Build(new BuildParameters(),
                   new BuildRequestData(new ProjectInstance(CS_PROJ_FILE), 
                                        new[] {"Build"}));
EN

回答 3

Stack Overflow用户

发布于 2017-05-30 10:54:55

安装后,我也遇到了相同的错误:

代码语言:javascript
复制
Install-Package Microsoft.Build -Version 15.1.1012

但后来我安装了:

代码语言:javascript
复制
Install-Package Microsoft.Build.Utilities.Core -Version 15.1.1012

一切都开始运作了。

有点困惑..。

"dasMulli“在以下位置指出了这个堆栈溢出问题:

https://github.com/Microsoft/msbuild/issues/1889

票数 19
EN

Stack Overflow用户

发布于 2018-04-24 02:29:55

显然有一种新的方法来解决这个问题,正如这里这里所描述的那样。

以下是对我起作用的东西:

  1. 我从项目的输出文件夹中删除了Microsoft.Build.dllMicrosoft.Build.Framework.dllMicrosoft.Build.Tasks.Core.dllMicrosoft.Build.Utilities.Core.dll (即所有Microsoft.Build .dll文件)。
  2. 我从项目的引用中删除了几个Microsoft.Build NuGet包。
  3. 我为我的项目安装了Microsoft.Build.Locator NuGet包。
  4. 我将以下代码添加到我的程序中: //这需要升级到罗斯林修订版34025,请参阅以下两个链接: // https://github.com/dotnet/roslyn/issues/26029 // https://stackoverflow.com/a/49886334/253938 MSBuildLocator.RegisterDefaults();

这修复了OP列出的异常,避免了大量编译器无法解析所有引用的错误消息。

编辑:更多信息在这里:https://gist.github.com/DustinCampbell/32cd69d04ea1c08a16ae5c4cd21dd3a3

票数 7
EN

Stack Overflow用户

发布于 2019-10-25 06:12:27

Micrsoft提供了一个很好的链接这里

诀窍确实是使用nuget块,并指定ExcludeAssets=runtime来告诉NuGet,程序集仅在构建时才需要,不应该复制到输出目录。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44249320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档