Build project with Microsoft.Build API

后端 未结 3 1422
别跟我提以往
别跟我提以往 2020-12-16 18:13

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();
<         


        
相关标签:
3条回答
  • 2020-12-16 18:41

    There is apparently a new way to fix this problem, as described here and here.

    Here's what worked for me:

    1. 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.

    2. I deleted several Microsoft.Build NuGet packages from my project's references.

    3. I installed the Microsoft.Build.Locator NuGet package for my project.

    4. 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

    0 讨论(0)
  • 2020-12-16 19:00

    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

    0 讨论(0)
  • 2020-12-16 19:02

    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.

    0 讨论(0)
提交回复
热议问题