这是一个工作的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用编译它的方法。
//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):错误CS1525:无效表达式术语'.‘Program.cs(8,27):error CS1003:语法错误,':‘预期0警告(S)2错误(S)
我猜它使用了错误的MSBUILD可执行文件,但我没有找到强制MSBUILD bin路径的方法。
发布于 2016-08-11 20:57:57
您正在引用Microsoft.Build.*库的旧版本,请确保指向正确的库。如果使用旧的,您将尝试使用C# v5构建,后者不理解空残差运算符。
例如,在我的构建机器上,它们是:
C:\程序文件(x86)\MSBuild\14.0\Bin\Microsoft.Build.dll
和
C:\程序文件(x86)\MSBuild\14.0\Bin\Microsoft.Build.Framework.dll
发布于 2019-01-17 10:26:48
若要解决此问题,请尝试设置如下::
对于其他任何获取此错误的人,请不要使用位于: C:\Windows\Microsoft.NET\Framework64\v4.0.30319的msbuild
相反,可以在以下位置使用msbuild : C:\Program (x86)\MSBuild\14.0\Bin
https://stackoverflow.com/questions/38905908
复制相似问题