Reputation: 28500
I'm trying to build a project using the classes in Microsoft.Build.
The code is:
var project = new ProjectInstance(CS_PROJ_FILE);
project.Build();
However it's throwing the following exception:
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
I've tried adding the following to the packages (both in a net452 and a net7 project):
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"
Still get the same result.
I've also tried using the BuildManager
like this:
var buildManager = new BuildManager();
buildManager.Build(new BuildParameters(),
new BuildRequestData(new ProjectInstance(CS_PROJ_FILE),
new[] {"Build"}));
Upvotes: 12
Views: 5088
Reputation: 519
Install-Package Microsoft.Build.Utilities.Core
as pointed out above worked for me. Done in a minute. Shortest fix. VS2022 / MSBUILD current.
Upvotes: -1
Reputation: 8753
I hit the same error after I installed:
Install-Package Microsoft.Build -Version 15.1.1012
But then I installed:
Install-Package Microsoft.Build.Utilities.Core -Version 15.1.1012
And things started working.
A little confusing...
I was pointed to this Stackoverflow question by "dasMulli" at:
https://github.com/Microsoft/msbuild/issues/1889
Upvotes: 22
Reputation: 479
Micrsoft provides a good link here
The trick is indeed to use nuget pacakges, and to specify ExcludeAssets=runtime to tell NuGet that the assemblies are needed only at build time, and shouldn't be copied to the output directory.
Upvotes: 2
Reputation: 11658
There is apparently a new way to fix this problem, as described here and here.
Here's what worked for me:
I deleted Microsoft.Build.dll
, Microsoft.Build.Framework.dll
, Microsoft.Build.Tasks.Core.dll
and Microsoft.Build.Utilities.Core.dll
(i.e., all Microsoft.Build
.dll files) from my project's output folder.
I deleted several Microsoft.Build
NuGet packages from my project's references.
I installed the Microsoft.Build.Locator
NuGet package for my project.
I added the following code to my program:
// 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();
This fixed the exception listed by the OP and avoided the tons of compiler error messages about being unable to resolve all references.
Edit: More information here: https://gist.github.com/DustinCampbell/32cd69d04ea1c08a16ae5c4cd21dd3a3
Upvotes: 7