使用 Microsoft.Build ( Visual Studio SDK ) 编译 C# 6 时出错
Error compiling C# 6 with Microsoft.Build ( Visual Studio SDK )
这是一个有效的 C#6 测试代码。它在 VS2015
上编译
namespace testcode
{
class Program
{
static void Main(string[] args)
{
string x = null ;
string y = x?.Substring(0, 2);
return;
}
}
}
cproj
有工具版本 14.0
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
这就是我尝试通过 Visual Studio SDK
使用 MSBUILD 编译它的方式
//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();
}
}
}
这是错误信息
Program.cs(8,26): error CS1525: Invalid expression term '.'
Program.cs(8,27): error CS1003: Syntax error, ':' expected
0 Warning(s)
2 Error(s)
我猜它使用了错误的 MSBUILD 可执行文件,但我没有找到强制 MSBUILD bin 路径的方法。
您引用的是旧版本的 Microsoft.Build.*
库,请确保您指向的是正确的库。如果您使用旧的,您将尝试使用不理解空传播运算符的 C# v5 进行构建。
例如,在我的构建机器上它们是:
C:\Program Files (x86)\MSBuild.0\Bin\Microsoft.Build.dll
和
C:\Program Files (x86)\MSBuild.0\Bin\Microsoft.Build.Framework.dll
要解决此问题,请尝试以下设置:
对于遇到此错误的任何其他人,请勿使用位于以下位置的 msbuild:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319
改为在以下位置使用 msbuild:
C:\Program Files (x86)\MSBuild.0\Bin
这是一个有效的 C#6 测试代码。它在 VS2015
上编译namespace testcode
{
class Program
{
static void Main(string[] args)
{
string x = null ;
string y = x?.Substring(0, 2);
return;
}
}
}
cproj
有工具版本 14.0
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
这就是我尝试通过 Visual Studio SDK
使用 MSBUILD 编译它的方式//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();
}
}
}
这是错误信息
Program.cs(8,26): error CS1525: Invalid expression term '.' Program.cs(8,27): error CS1003: Syntax error, ':' expected 0 Warning(s) 2 Error(s)
我猜它使用了错误的 MSBUILD 可执行文件,但我没有找到强制 MSBUILD bin 路径的方法。
您引用的是旧版本的 Microsoft.Build.*
库,请确保您指向的是正确的库。如果您使用旧的,您将尝试使用不理解空传播运算符的 C# v5 进行构建。
例如,在我的构建机器上它们是:
C:\Program Files (x86)\MSBuild.0\Bin\Microsoft.Build.dll
和
C:\Program Files (x86)\MSBuild.0\Bin\Microsoft.Build.Framework.dll
要解决此问题,请尝试以下设置:
对于遇到此错误的任何其他人,请勿使用位于以下位置的 msbuild: C:\Windows\Microsoft.NET\Framework64\v4.0.30319
改为在以下位置使用 msbuild: C:\Program Files (x86)\MSBuild.0\Bin