我正在尝试使用Microsoft.Build中的类构建项目。
代码是:
var project = new ProjectInstance(CS_PROJ_FILE);
project.Build();
然而,它抛出了以下异常:
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项目中):
仍然得到相同的结果。
我也尝试过这样的BuildManager
:
var buildManager = new BuildManager();
buildManager.Build(new BuildParameters(),
new BuildRequestData(new ProjectInstance(CS_PROJ_FILE),
new[] {"Build"}));
答案 0 :(得分:11)
我安装后遇到了同样的错误:
Install-Package Microsoft.Build -Version 15.1.1012
但后来我安装了:
Install-Package Microsoft.Build.Utilities.Core -Version 15.1.1012
事情开始奏效了。
有点混乱......
我被#34; dasMulli"指向了这个stackoverflow问题。于:
答案 1 :(得分:3)
这对我有用:
我从我的项目中删除了Microsoft.Build.dll
,Microsoft.Build.Framework.dll
,Microsoft.Build.Tasks.Core.dll
和Microsoft.Build.Utilities.Core.dll
(即所有Microsoft.Build
.dll文件)。输出文件夹。
我从项目的参考资料中删除了几个Microsoft.Build
NuGet包。
我为我的项目安装了Microsoft.Build.Locator
NuGet包。
我在程序中添加了以下代码:
// This needed after upgrading to Roslyn revision 34025, see these two links:
// https://github.com/dotnet/roslyn/issues/26029
// https://stackoverflow.com/a/49886334/253938
MSBuildLocator.RegisterDefaults();
这修复了OP 和列出的异常,避免了大量关于无法解析所有引用的编译器错误消息。
修改:此处提供更多信息:https://gist.github.com/DustinCampbell/32cd69d04ea1c08a16ae5c4cd21dd3a3
答案 2 :(得分:0)
Micrsoft提供了良好的链接here
诀窍确实是使用nuget pacakges,并指定ExcludeAssets = runtime来告诉NuGet仅在构建时才需要程序集,并且不应将程序集复制到输出目录。