无法在 Azure DevOps 上构建/测试 .NET Core 测试项目 - 无效的语言版本

Pur*_*ome 5 testing azure-devops

我正在尝试在 Azure DevOps 中运行dotnet test,但我不断收到此错误:

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>

...
Run Code Online (Sandbox Code Playgroud)

这是我的文件的开始.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'

...
Run Code Online (Sandbox Code Playgroud)

我也曾<LangVersion>latest</LangVersion>.csproj.

我已经三次检查项目文件中是否有该文件<LangVersion>,其中正在测试测试。


更新

所以我似乎可以使用它,但我仍然不知道这是一个“黑客”解决方案还是正确的解决方案。但是,我仍然不确定为什么会出现这个问题。

我添加langver为 msbuild 属性:

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

注意最后一个参数...

Leo*_*SFT 0

我不确定为什么会发生这个问题......所以我希望得到一些帮助来解释这一点

有一种情况可能会导致这个问题,但我不太确定它是否适用于你,你可以检查一下。

当我们在项目文件中设置属性时<LangVersion>7.3</LangVersion>,该属性位于debug属性组中:

在此输入图像描述

但是,当我们在 Azure Devops 中构建它时,我们将构建配置设置为release, 在您的.yml文件中:

variables:
  buildConfiguration: 'Release'
....
Run Code Online (Sandbox Code Playgroud)

-p:langversion=latest这可能就是为什么在使用 Azure Devops 构建时需要再次传递参数 ( ) 的原因。

此外,对于所有项目配置来说最简单的方法(个人):

  • 右键单击YourProject,单击Properties

  • Build如果尚未选择,请单击

  • 将配置更改为All Configurations

  • 点击Advanced...

  • 更改语言版本

希望这可以帮助。