Имя nameof не существует в текущем контексте
9 ответов
Да, чтобы использовать возможности C# 6, вам нужен компилятор C# 6. Visual Studio 2013 не имеет компилятора C# 6. Visual Studio 2015 делает.
Были предварительные выпуски Roslyn для Visual Studio 2013, но они не реализуют окончательный C# 6: они фактически не реализуют все функции, и то, что они делают, отличается от окончательного поведения C# 6.
В pre-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;
}
}
}
Да, вам нужно использовать Visual Studio 2015. Он не поддерживается в VS 2013. Ссылка по ссылке: https://msdn.microsoft.com/en-us/library/dn986596.aspx
Установка этого пакета исправила его для моего проекта.
Пакет установки Microsoft.CodeDom.Providers.DotNetCompilerPlatform
Вы не сможете использовать C#6 в VS2013. Компилятор не поймет новый синтаксис C#6, который вы пытаетесь использовать. Как я могу добавить C# 6.0 в Visual Studio 2013?
Я получил эту ошибку при использовании DotNetFiddle, я просто перешел на .NET Core вместо .NET 4.7.X.
Если вы получаете эту ошибку в Teamcity, внесите следующие изменения, чтобы исправить ее.
- Откройте свой шаг MSBuild в команде
- Измените версию MSBuild на Microsoft Build Tools 2015
- Измените MSBuild ToolVersion на 14.0
Если вы получаете эту ошибку и используете последнюю версию .Net, это может быть связано с тем, что вы используете имя чего-то, что не является типом .Net. Вот пример:
Оригинал с необходимостью замены HardCoded «BaseUrl».
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
});
- В "Консоли диспетчера пакетов" выполните "install-package Microsoft.Net.Compilers", выбрав соответствующий проект.
- Убедитесь, что "C# Language Level" - это "C# 6.0" в настройках вашего проекта.