#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
. В приведенном выше примере файла отсутствует msbuildif checks
. Итак, я не думаю, что ваш ответ точен?2. Кроме того, я пробовал
All Configurations -> Advanced
то, что было до публикации этого вопроса — все еще не сработало : (