使用 Microsoft.Build ( Visual Studio SDK ) 编译 C# 6 时出错

xva*_*van 3 msbuild microsoft.build visual-studio-sdk c#-6.0 visual-studio-2015

这是一个有效的 C#6 测试代码。它在 VS2015 上编译

namespace testcode
{
    class Program
    {
        static void Main(string[] args)
        {
            string x = null ;
            string y = x?.Substring(0, 2);
            return;
        }       
    }
}
Run Code Online (Sandbox Code Playgroud)

cproj有toolsversion14.0

<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
Run Code Online (Sandbox Code Playgroud)

这就是我试图通过Visual Studio SDKMSBUILD编译它的方式

//References Microsoft.Build and Microsoft.Build.Framework
namespace MSBuildTest
{
    class Program
    {
        static void Main(string[] args)
        {
            var pc = new Microsoft.Build.Evaluation.ProjectCollection(Microsoft.Build.Evaluation.ToolsetDefinitionLocations.Registry);
            pc.DefaultToolsVersion = "14.0";
            pc.RegisterLogger(new Microsoft.Build.Logging.ConsoleLogger(Microsoft.Build.Framework.LoggerVerbosity.Detailed));
            var pr = pc.LoadProject(@"C:\path\to\testcode.cproj");
            pr.Build();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是错误信息

Program.cs(8,26): error CS1525: Invalid expression term '.'
Program.cs(8,27): error CS1003: Syntax error, ':' expected
    0 Warning(s)
    2 Error(s)
Run Code Online (Sandbox Code Playgroud)

我猜它使用了错误的 MSBUILD 可执行文件,但我发现无法强制使用 MSBUILD bin 路径。

San*_*dar 7

要解决此问题,请尝试以下设置:

对于遇到此错误的任何其他人,请勿使用位于以下位置的 msbuild:C:\Windows\Microsoft.NET\Framework64\v4.0.30319

而是在以下位置使用 msbuild:C:\Program Files (x86)\MSBuild\14.0\Bin

  • 我在以下路径下找到了工作的 msbuild.exe:“C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\msbuild.exe”。正如您所指出的,.net Framework 文件夹下的那个似乎不同并且不起作用。现在,奇怪的编译器错误已经消失了。谢谢! (2认同)