Как использовать C# 6 с типом проекта веб-сайта?



обновление существующего Web Site тип проекта Visual Studio 2015, я изменил фреймворк на 4.6.



затем я ожидал, что все эти новые функции будут доступны в моем коде за файлами.



к сожалению, я получаю ошибки, как:




ошибка CS8026: функция 'expression-bodied property' недоступна в C# 5. Пожалуйста, используйте язык версии 6 или выше.




или например:




ошибка CS8026: функция "интерполированные строки" недоступна в C# 5. Пожалуйста, используйте язык версии 6 или выше.




Я сделал быструю проверку Google и нашел парень публикует некоторые комментарии в блоге scottgu (поиск "8026" на странице).



поскольку я не понимаю его решение, плюс я хочу, чтобы решение было более заметным, я создал эту публикацию SO.



мой вопрос:



Как я могу иметь Проект Visual Studio 2015 типа Web Site (т. е. Веб-Приложения) для распознавания функций C# 6?

667   7  

7 ответов:

Я проверил это с помощью ASP.NET MVC 5 (проверено 5.2.3), и ваш пробег может отличаться от других веб-фреймворков, но вам просто нужно добавить Рослин CodeDOM/ NuGet пакета

поставщики CodeDOM для компилятора .NET...

замена поставщиков CodeDOM, которые используют новую платформу компилятора .NET ("Roslyn") компилятор в качестве API службы. Это обеспечивает поддержку новых языковых функций в системах, использующих CodeDOM (например ASP.NET время выполнения сборник), а также повышение производительности компиляции этих систем.

PM> Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

https://www.nuget.org/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/

пакет NuGet должен добавить DLL-файлы и добавить следующее в ваш веб-сайт.конфиг.

  <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>

если он все еще отсутствует. Попробуйте добавить себя.

см. также этот блог С Саид Ибрахим Хашими о том, как это сделать через vs IDE.

в Visual Studio 2015 Update 1 мы включили новую функцию, чтобы упростить это. Если у вас открыто решение, которое имеет хотя бы один веб-проект, который нацелен на .NET 4.5+ и не имеет пакета NuGet DotNetCompilerPlatform в меню проекта, вы увидите новую опцию, включите C# 6 / VB 14 появиться.
enter image description here

Я установил DotNetCompilerPlatform как @ jbtule предложил, но все еще получал те же ошибки.

PM> Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

Я закрыл решение, удалил папки bin и obj, затем открыл решение и перестроил. Теперь функции C# 6 работают.

возможные решения, взятые из комментарии на блоге ScottGu пишет (поиск "8026"на странице):

предложение решения 1 (Дэвид Тейлор)

добавьте эти элементы кода RTM dom в 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>

затем добавьте Roslyn и Microsoft.граф CodeDOM.Услуги поставщиков.*.dll вещи в ваш каталог BIN.

это достаточно легко настроить, но просто было странно для меня, что шаблон по умолчанию не был настроен для него, если вы выбран .NET 4.6 при создании нового "веб-сайта" в VS 2015 RTM.

предложение решения 2 (Мартин)

В дополнение к комментарию Дэвида Тейлора выше, это похоже на систему.настройки codedom верны, когда веб-приложение создается с TargetFramework в качестве V4.5.2 по умолчанию. Изменение TargetFramework на v4.6, по-видимому, изменяет параметры компилятора для CSharp таким образом, что вызывает проблему.

мои обходные пути были следующими:

  1. File/New / ASP.NET Web Application
  2. Выберите шаблон "Web API" из ASP.NET 4.5.2 Шаблоны
  3. возьмите копию системы.элемент codedom (и его содержимое) в web.конфигурации
  4. используя свойства / TargetFramework, установите целевой фреймворк в 4.6
  5. замените измененную систему.элемент модели в интернете.конфигурация с копией, сделанной до изменения TargetFramework
  6. нажмите F5

Домашняя страница должна загружаться.

информация, система.содержимое codedom сразу после изменения TargetFramework на v4.6. было следующим (обратите внимание на использование типа " Microsoft.CSharp.CSharpCodeProvider"):

<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.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.

вы можете переключать C# 6 в пользовательском интерфейсе Visual Studio. Это такой простой вариант, стоит попробовать в первую очередь.

  1. щелкните правой кнопкой мыши проект и выберите свойства.
  2. выберите Build tab.
  3. на вкладке "Build" имеет дополнительно... кнопка в самом низу.
  4. это открывает элемент Расширенные Настройки Сборки как показано ниже. Выберите C# 6.0.

enter image description here

вот как это выглядит в VS2017 с проектом веб-сайта:

enter image description here

Я получил эту ошибку после внесения нулевых изменений в мой проект WebAPI. Я удалил пакет DotNetCompilerPlatform nuget и переустановил его, что исправило проблему.

Comments

    Ничего не найдено.