Постійно отримувала цю помилку під час запуску свіжої програми ASP.NET MVC (прямо з VS 2015 Community) на машині Windows 2008 Server.
Постійно отримувала цю помилку під час запуску свіжої програми ASP.NET MVC (прямо з VS 2015 Community) на машині Windows 2008 Server.
Відповіді:
Багато людей стикаються з цим, тому я хотів писати тут.
Знайшов божевільний легкий обхідний шлях завдяки цьому хлопцеві: 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=\"Web\" /optionInfer+">
<providerOption name="CompilerVersion" value="v4.0"/>
</compiler>
</compilers>
</system.codedom>
Змініть langversion:6
напрямок донизу з 6 на 5 -langversion:5
Виправив це для мене. Дякуйте йому.
Якщо ви хочете використовувати C # 6.0:
.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=\"Web\" /optionInfer+" />
</compilers>
</system.codedom>
Я виявив, що безпосередньою причиною помилки в моєму випадку було:
це має сенс, оскільки помилка стверджує, що існує неприпустимий варіант мови.
але, це раніше працювало нормально - тому його, мабуть, було обрано. що змінилося? виявляється, член моєї команди оновлений до 2017 року, поки я все ще використовував 2015 рік. Після того, як він вніс зміни в проект, мовну версію було змінено, і я отримав цю зміну над контролем джерела. але вибрана версія була недоступна для моєї версії vs, тому вона була порожньою - звідси і помилка. після вибору значення у спадному списку мови (я вибрав за замовчуванням), з’явилася нова помилка. нова помилка спричиняла помилку збірки будь-яких рядків коду, які використовували новішу версію c #. Я змінив код для виконання тих самих функцій, але з моїм синтаксисом версії c # та вирішенням проблеми.
отже, хоча прямою причиною помилки справді був недійсний вибір мовної версії, основна причина - через різні конфліктні версії vs / c #.
У моєму випадку помилка була:
Помилка CS1617 Недійсний параметр "останній" для / langversion; має бути ISO-1, ISO-2, за замовчуванням або ціле число в діапазоні від 1 до 6.
Я відкрив свій файл .csproj за допомогою блокнота і побачив такий рядок:
<PropertyGroup>
<LangVersion>latest</LangVersion>
</PropertyGroup>
Я змінив останнє для цілого числа в діапазоні від 1 до 6
<LangVersion>6</LangVersion>
Помилка зникла!
У моєму випадку я використовував неправильний 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
у моєму випадку (проект створюється в іншій системі):
Я можу запустити цей проект.
Замість того, щоб змінювати мовну версію з 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
Найпростішим рішенням для мене було оновлення компіляторів .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=\"Web\" /optionInfer+" />
</compilers>
</system.codedom>
Виявляється, це була проблема, оскільки проект 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 насправді намагається використовувати)
Я оновив Microsoft.Net.Compilers до версії 2.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=\"Web\" /optionInfer+”>
<providerOption name=”CompilerVersion” value=”v4.0″/>
</compiler>
</compilers>
Очистіть рішення та побудуйте знову У моєму випадку, будь-які попередні налаштування блокувались через невідповідність. Я імпортував новий проект і будую його, спробував змінити версії і все. очищення рішень та побудова працювали для мене.
У моєму випадку я завантажував з 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, помилка негайно зникла.
У моєму випадку повідомлення про помилку було:
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" папка мала перевагу під час компіляції.
Це трапилося зі мною, коли я перемістив репо, перенісши його на нове місце. Рішенням було вивантажити, а потім перезавантажити кожен проект, який демонстрував цю помилку.
Я спробував кілька інших варіантів, але у мене нічого не вийшло. Також у цій ситуації мої конфігураційні файли були налаштовані на використання мовиверсії 6, тому встановлення їх за замовчуванням не вирішило проблему.
Якщо вищезазначені параметри не працюють, і ви використовували 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')" />