CS1617: Недійсний параметр '6' для / langversion; має бути ISO-1, ISO-2, 3, 4, 5 або за замовчуванням


89

Постійно отримувала цю помилку під час запуску свіжої програми ASP.NET MVC (прямо з VS 2015 Community) на машині Windows 2008 Server.


3
Понижте мовну версію до 5. Подивіться: Як змінити мовну версію
NASSER

У моєму випадку я оновив System.Web.Mvc.dll з версії 5.2.3 до 5.2.7, це вирішило цю проблему, оскільки версія неправильна.
Діно Лю

Відповіді:


103

Багато людей стикаються з цим, тому я хотів писати тут.

Знайшов божевільний легкий обхідний шлях завдяки цьому хлопцеві: Expertdebugger .

Просто знижте свою мовну версію з C # 6 на C # 5, наприклад:

<system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701">
        <providerOption name="CompilerVersion" value="v4.0"/>
      </compiler>
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+">
          <providerOption name="CompilerVersion" value="v4.0"/>
      </compiler>
    </compilers>
</system.codedom>

Змініть langversion:6напрямок донизу з 6 на 5 -langversion:5

Виправив це для мене. Дякуйте йому.


1
Велике спасибі, що мені допомогло.
Ага.

28
Це просто говорить компілятору компілювати з версією C # 5 замість 6, а це не те, що потрібно, якщо ви створюєте проект .NET 4.6 ... Що вам дійсно потрібно змінити, це тип компілятора, як це показано на інша відповідь на це питання!
Нуно Агапіто,

1
Або видаліть сам блок <system.codedom>, він також вирішить проблему.
Анупам Сінгх,

5
Змінити це де? Я маю на увазі, куди мені потрібно помістити цей код?
Незламний

Помістіть його у свій файл web.config або app.config
csharpforevermore

81

Якщо ви хочете використовувати C # 6.0:

  1. Переконайтесь, що версія .NET вашого проекту перевищує 4.5.2.
  2. А потім перевірте свій .configфайл, щоб виконати такі зміни.

Шукайте system.codedomта модифікуйте його так, щоб він виглядав, як показано нижче:

<system.codedom>
 <compilers>
  <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
  <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
 </compilers>
</system.codedom>

Це саме те, що я шукав. Я почав отримувати цю помилку після оновлення проекту ASP.NET MVC з .NET Framework 4.5.2 до 4.6. Я не впевнений, але я думаю, що було б краще, якби Visual Studio оновив ці рядки самостійно.
Zignd

3
На це слід дати правильну відповідь, оскільки це насправді вирішує проблему і дозволяє компілятору використовувати останню версію, а не повертатися до старої версії
SM3RKY

1
Погодьтеся з SM3RKY - ця відповідь більш актуальна, оскільки вирішує проблему, а не обходить її!
Jon Story

Якщо ви оновите своє рішення до .net 4.6 для існуючого проекту за допомогою VS 2015 Community або нижче, ця помилка виникає. Після оновлення VS 2015 Update 3 це виправлення за замовчуванням з’являється для нових проектів. Однак відповідь - це точне виправлення!
Mahmut C

Це вирішило проблему для мене в проекті .Net 4.6.2 із використанням ASP.NET (веб-форми) та VB.NET
Ерік Хьюетт,

14

Я виявив, що безпосередньою причиною помилки в моєму випадку було:

збірка -> розширена -> мовна версія

це має сенс, оскільки помилка стверджує, що існує неприпустимий варіант мови.

але, це раніше працювало нормально - тому його, мабуть, було обрано. що змінилося? виявляється, член моєї команди оновлений до 2017 року, поки я все ще використовував 2015 рік. Після того, як він вніс зміни в проект, мовну версію було змінено, і я отримав цю зміну над контролем джерела. але вибрана версія була недоступна для моєї версії vs, тому вона була порожньою - звідси і помилка. після вибору значення у спадному списку мови (я вибрав за замовчуванням), з’явилася нова помилка. нова помилка спричиняла помилку збірки будь-яких рядків коду, які використовували новішу версію c #. Я змінив код для виконання тих самих функцій, але з моїм синтаксисом версії c # та вирішенням проблеми.

отже, хоча прямою причиною помилки справді був недійсний вибір мовної версії, основна причина - через різні конфліктні версії vs / c #.


1
Ця відповідь допомогла мені після перевірки всіх інших. спасибі
MindRoasterMir

1
Ця відповідь стосувалась і мого випадку, коли я намагався запустити проект, встановлений на C # 8, але він не підтримується у моїй візуальній студії 2017. Тільки проти 2019
Vinícius Gabriel

13

У моєму випадку помилка була:

Помилка CS1617 Недійсний параметр "останній" для / langversion; має бути ISO-1, ISO-2, за замовчуванням або ціле число в діапазоні від 1 до 6.

Я відкрив свій файл .csproj за допомогою блокнота і побачив такий рядок:

<PropertyGroup>
    <LangVersion>latest</LangVersion>
</PropertyGroup>

Я змінив останнє для цілого числа в діапазоні від 1 до 6

<LangVersion>6</LangVersion>

Помилка зникла!


Дуже дякую! Зараз налагодження у VS2015 та Unity2018 працює
8Observer8,

Потрібно не точно відкривати їх у блокноті, але з візуального вивчення можна завантажити проект, а потім відредагувати проект, що також вирішить цю проблему.
Шанту

12

У моєму випадку я використовував неправильний MSBuild.exe, той, який міститься в:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319

Щоб усунути помилку, я оновив змінну середовища PATH, щоб почати використовувати Visual Studio 2017 MSBuild.exe:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSbuild.exe

Детальніше див. Це посилання: Помилка CS1056: Несподіваний символ '$' під час запуску msbuild у процесі безперервної інтеграції tfs


Те саме тут, у моєму випадку я встановив MSBuild Tools і використовував msbuild з "C: \ Program Files (x86) \ MSBuild \ 14.0 \ Bin \ MSBuild.exe"
falstaff

9

у моєму випадку (проект створюється в іншій системі):

  1. чистий проект (клацніть правою кнопкою миші на проекті у провіднику рішень та клацніть на чистому елементі).
  2. потім побудуйте проект (клацніть правою кнопкою миші на проекті у провіднику рішень та клацніть елемент побудови).

Я можу запустити цей проект.


5

Замість того, щоб змінювати мовну версію з 6 на 5, змініть атрибут "type" на тезі компілятора з

Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

до

Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35

4

Оновіть пакет Microsoft.Net.Compilers Nuget до останньої версії (принаймні 2.x)


2

Найпростішим рішенням для мене було оновлення компіляторів .Net за допомогою диспетчера пакетів

Встановити пакет Microsoft.Net.Compilers

а потім змінивши рядки Web.Config на це

<system.codedom>
 <compilers>
  <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
  <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
 </compilers>
</system.codedom>

1

Виявляється, це була проблема, оскільки проект ASP.NET MVC 4 посилався на певну версію пакета Microsoft.Net.Compilers. Visual Studio використовував компілятор із цього конкретного пакету, а не компілятор, інший встановлений на комп'ютері.

Попередження або щось інше було б приємно від VS2019 :-)

Тоді рішення полягає в оновленні пакета Microsoft.Net.Compilers до новішої версії.

Версія 1.x призначена для C # 6 Версія 2.x призначена для C # 7 Версія 3.x призначена для C # 8 Як я вирішив це, не одразу стало очевидним. Visual Studio міг припустити або натякнути, що, вибравши нову версію в налаштуваннях проекту, ця настройка тепер суперечить пакету, встановленому в проекті.

(У підсумку я ввімкнув ведення журналу MSBuild на рівні діагностики, щоб з’ясувати, який CSC.EXE IDE насправді намагається використовувати)

https://developercommunity.visualstudio.com/content/problem/519531/c-7x-versions-do-not-seem-to-work-in-vs2019.html



0

Я просто змінив langversionна, defaultі це спрацювало для мене. VS 2015

<system.codedom>
<compilers>
  <compiler language=”c#;cs;csharp” extension=”.cs” type=”Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089″ warningLevel=”4″ compilerOptions=”/langversion:default /nowarn:1659;1699;1701″>
    <providerOption name=”CompilerVersion” value=”v4.0″/>
  </compiler>
  <compiler language=”vb;vbs;visualbasic;vbscript” extension=”.vb” type=”Microsoft.VisualBasic.VBCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089″ warningLevel=”4″ compilerOptions=”/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+”>
      <providerOption name=”CompilerVersion” value=”v4.0″/>
  </compiler>
</compilers>


0

Очистіть рішення та побудуйте знову У моєму випадку, будь-які попередні налаштування блокувались через невідповідність. Я імпортував новий проект і будую його, спробував змінити версії і все. очищення рішень та побудова працювали для мене.


0

У моєму випадку я завантажував з GITHUB бібліотеку із зразком коду реалізації маніпулятора ключів від mattorg: https://github.com/mattmorg55/Owin.Security.Keycloak/tree/dev/samples

Рішення було досить простим, оскільки я використовував .Net Framework 4.6.1, але проект спочатку просив мене використовувати 4.6.2. Незважаючи на те, що я завантажив його, його спочатку активно вибрали, коли перезапустити всі екземпляри Visual Studion (або краще закрити всі екземпляри). Проектом маніпулювали до версії 4.6.1 (хоча я цього не хотів і вибрав).

Тож після того, як я знову обрав конфігурацію, щоб вибрати .Net Framework 4.6.1, помилка негайно зникла.


0

У моєму випадку повідомлення про помилку було:

ASPNETCOMPILER: помилка CS1617: Недійсний параметр '7.3' для / langversion; має бути ISO-1, ISO-2, за замовчуванням або ціле число в діапазоні від 1 до 6.

Як зазначено у цьому випуску GitHub та у цій публікації спільноти розробників VS, здається, це помилка у старому пакеті Microsoft.CodeDom.Providers.DotNetCompilerPlatform NuGet.

Після оновлення цього пакета NuGet до 3.6.0 помилка все ще зберігалася в моєму веб-додатку.

Рішення

Я з’ясував, що мені довелося видалити стару папку "bin \ Roslyn" у своєму веб-додатку, щоб зробити це ефективно.

Здається, що новіший пакет Microsoft.CodeDom.Providers.DotNetCompilerPlatform NuGet (у моєму випадку 3.6.0) більше не має власної папки "Rosyln", і якщо така є, то ця стара "Roslyn" папка мала перевагу під час компіляції.


0

Це трапилося зі мною, коли я перемістив репо, перенісши його на нове місце. Рішенням було вивантажити, а потім перезавантажити кожен проект, який демонстрував цю помилку.

Я спробував кілька інших варіантів, але у мене нічого не вийшло. Також у цій ситуації мої конфігураційні файли були налаштовані на використання мовиверсії 6, тому встановлення їх за замовчуванням не вирішило проблему.


0

Якщо вищезазначені параметри не працюють, і ви використовували nuget-пакети, такі як Microsoft.Net.Compilers та CodeDom, але все ще не працюєте, тоді у вашому файлі проекту є проблема, відкритий файл проекту. Файл проекту використовує один із варіантів компілятора, який не підтримує вибрану вами мову. Відкрийте файл проекту за допомогою notepad ++ і видаліть наступний рядок.

Файл проекту Orignal

<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="..\packages\Microsoft.Net.Compilers.Toolset.3.7.0\build\Microsoft.Net.Compilers.Toolset.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.Toolset.3.7.0\build\Microsoft.Net.Compilers.Toolset.props')" />
  <Import Project="..\packages\Microsoft.Net.Compilers.3.7.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.3.7.0\build\Microsoft.Net.Compilers.props')" />
  <Import Project="..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props')" />
  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props" Condition="Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props')" />
  <!--Don't delete below one-->
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />

Видаліть наступні рядки

  <Import Project="..\packages\Microsoft.Net.Compilers.Toolset.3.7.0\build\Microsoft.Net.Compilers.Toolset.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.Toolset.3.7.0\build\Microsoft.Net.Compilers.Toolset.props')" />
  <Import Project="..\packages\Microsoft.Net.Compilers.3.7.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.3.7.0\build\Microsoft.Net.Compilers.props')" />
  <Import Project="..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props')" />
  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props" Condition="Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props')" />
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.