Изменение версии C# в Visual Studio 2019 - PullRequest
3 голосов
/ 16 февраля 2020

Я использую Visual Studio 2019 и пытаюсь изменить свою версию C#. Я делаю это потому, что серверы сборки, которые я использую, используют более старую версию VS / MSBuild для сборки и развертывания кода (это вне моего контроля). Поэтому мне нужно использовать C# 5.

. В предыдущих версиях Visual Studio это можно было сделать из меню в [Project] -> Properties -> Build -> Advanced. Для VS2019 Microsoft в своей бесконечной мудрости решила сделать это сложнее. Очевидно, вам нужно отредактировать файл проекта вручную и добавить:

<PropertyGroup>
   <LangVersion>[some version here]</LangVersion>
</PropertyGroup>

В файл проекта вручную. Это все хорошо, но я не могу заставить это работать. Он просто игнорирует это, даже после того, как я его разгрузил и перезагрузил. Вот снимок моего файла проекта:

<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
   <LangVersion>5</LangVersion>
  </PropertyGroup>
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectGuid>{58FE5465-851B-471F-B6A9-9C861FA5C022}</ProjectGuid>
    <OutputType>Library</OutputType>
...

Есть идеи, как я могу сделать эту работу? Это, наверное, что-то действительно глупое, что я скучаю. Примечание: я видел этот предыдущий вопрос, но ему не хватало деталей.

1 Ответ

1 голос
/ 18 февраля 2020

Оказывается, @lennart был прав: в файле были и другие <LangVersion>. VS спрятал их в некоторых конфигурациях сборки.

    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
    <DebugSymbols>true</DebugSymbols>
    <OutputPath>bin\x86\Debug\</OutputPath>
    <DefineConstants>TRACE;DEBUG;PLATFORM_X86</DefineConstants>
    <DebugType>full</DebugType>
    <PlatformTarget>x86</PlatformTarget>
    <LangVersion>7.3</LangVersion> <-- HERE!!
    <ErrorReport>prompt</ErrorReport>
    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
    <OutputPath>bin\x86\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>

SOLUTION : я удалил все эти особые случаи конфигурации и по умолчанию вернул язык, который я перечислил в верхней части файл.

Я могу сказать, что это сработало в моем случае, потому что теперь он отклоняет интерполированные строки (например, $"{value}words"), говоря, что он не доступен в C # 5.

Что касается того, какие имена языков работают, и «5», и «5,0» работали для меня. Остальные варианты можно найти здесь

Я чувствую себя немного глупо, надеюсь, этот вопрос все еще будет полезен для некоторых будущих людей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...