Не удалось создать / протестировать тестовый проект .NET Core в Azure DevOps — неверная языковая версия

#testing #azure-devops

#тестирование #azure-devops

Вопрос:

Я пытаюсь запустить dotnet test в Azure DevOps, но я продолжаю получать эту ошибку:

ControllerTests / v1Tests /FooTests /DetailsAsyncTests.cs(241,64): ошибка CS8107: функция «литерал по умолчанию» недоступна в C # 7.0. Пожалуйста, используйте языковую версию 7.1 или выше.

Это начало моего .csproj файла..

 <Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    <LangVersion>7.3</LangVersion>
    <PackageId><snipped></PackageId>
    <Version>0.0.0</Version>
  </PropertyGroup>

...
  

и это начало моего .yml файла..

 name: $(Year:yyyy).$(Month).$(DayOfMonth).$(Rev:r)
pool:
  vmImage: 'Ubuntu 16.04'

variables:
  buildConfiguration: 'Release'
....

steps

<snip>

- script: |
    dotnet test tests/snip/foo1.csproj --configuration $(buildConfiguration) -p:Version=$(Build.BuildNumber)
    dotnet test tests/snip/foo2.csproj --configuration $(buildConfiguration) -p:Version=$(Build.BuildNumber)
    dotnet test tests/snip/foo3.csproj --configuration $(buildConfiguration) -p:Version=$(Build.BuildNumber)
  displayName: 'dotnet test'

...
  

Я также пробовал <LangVersion>latest</LangVersion> в .csproj .

Я трижды проверил, что в файле проекта есть это <LangVersion> , где тест проходит тестирование.


Обновить

Итак, мне кажется, что это, возможно, работает, но я все еще не знаю, является ли это решением «взлома» или правильным решением. Однако я все еще не уверен, почему возникает эта проблема.

Я добавил langver в качестве свойства msbuild:

 dotnet test tests/snip/foo2.csproj 
    --configuration $(buildConfiguration) 
    -p:Version=$(Build.BuildNumber)
    -p:langversion=latest
  

Обратите внимание на последний параметр…

Ответ №1:

я не уверен, ПОЧЕМУ возникает эта проблема… итак, я хотел бы получить некоторую помощь, объясняющую это

Существует ситуация, которая может вызвать эту проблему, но я не совсем уверен, применимо ли это к вам, вы можете проверить это.

Когда мы устанавливали свойство <LangVersion>7.3</LangVersion> в файле проекта, который был в debug группе свойств:

введите описание изображения здесь

Но когда мы создаем его в Azure Devops, мы устанавливаем конфигурацию сборки на release в вашем .yml файле:

 variables:
  buildConfiguration: 'Release'
....
  

Это может быть причиной, по которой вам необходимо повторно передать параметры ( -p:langversion=latest ) при сборке с Azure Devops.

Кроме того, самый простой способ сделать это для всех конфигураций проекта (персональных):

  • Щелкните правой кнопкой мыши YourProject , щелкните Properties

  • Нажмите Build , если он еще не выбран

  • Измените конфигурацию на All Configurations

  • Нажмите Advanced

  • Измените языковую версию

Надеюсь, это поможет.

Комментарии:

1. Привет @leo — что интересно в вашем предложении выше, так это то, что .csproj файл не имеет ничего общего с DEBUG или RELEASE . это просто файл, независимо от «Конфигурации». Обычно в csproj нем есть определенные строки, которые говорят (код pseduo) if configuration == debug, then do this .. or include this nuget, etc . В приведенном выше примере файла отсутствует msbuild if checks . Итак, я не думаю, что ваш ответ точен?

2. Кроме того, я пробовал All Configurations -> Advanced то, что было до публикации этого вопроса — все еще не сработало : (