是的,要使用C# 6功能,您需要一个C# 6编译器。Visual Studio 2013没有C# 6编译器。Visual Studio 2015有。
Visual Studio 2013有Roslyn预发布版,但它们不实现最终的C# 6:它们实际上不实现所有功能,并且它们所实现的与最终的C# 6行为不同。
是的,您需要使用Visual Studio 2015。它不支持在VS 2013中运行。相关链接:https://msdn.microsoft.com/en-us/library/dn986596.aspx
安装此 NuGet 包解决了我的项目问题。
Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
在VS2015之前,你可以将以下类添加到你的解决方案中,并将所有的nameof(
替换为NameOf.nameof(() =>
,如获取变量或参数的名称所建议。
using System;
using System.Linq.Expressions;
namespace ICSharpCode.SharpZipLib
{
public class NameOf
{
public static String nameof<T>(Expression<Func<T>> name)
{
MemberExpression expressionBody = (MemberExpression)name.Body;
return expressionBody.Member.Name;
}
}
}
如果在Teamcity中出现此错误,请按照以下步骤更改构建步骤以进行纠正。
IConfiguration settingsConfig = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();
Settings = Options.Create(new Settings
{
BaseUrl = settingsConfig.GetSection("BaseUrl").Value
});
这会导致错误,因为BaseUrl在上下文中不存在,所以它不起作用:
IConfiguration settingsConfig = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();
Settings = Options.Create(new Settings
{
BaseUrl = settingsConfig.GetSection(nameof(BaseUrl)).Value
});
您需要完全限定或指定一个已存在的 .Net 类型,例如:
Settings = Options.Create(new Settings
{
BaseUrl = settingsConfig.GetSection(nameof(Settings.BaseUrl)).Value
});