无法在Azure DevOps上构建/测试.NET Core测试项目-无效的langversion

时间:2019-04-04 01:55:28

标签: 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>

...

这是我的.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>,其中正在测试测试。


更新

所以我似乎可以使它工作,但是我仍然不知道这是一个“ hack”解决方案还是正确的解决方案。但是,我仍然不确定为什么会发生此问题。

我添加了langver作为msbuild属性:

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

注意最后一个参数...

1 个答案:

答案 0 :(得分:0)

  

我不确定为什么会发生此问题...所以我很乐意为您提供一些帮助来说明

有可能导致此问题的情况,但是我不确定它是否适用于您,您可以检查一下。

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

enter image description here

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

variables:
  buildConfiguration: 'Release'
....

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

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

  • 右键单击YourProject,然后单击Properties

  • 单击Build(如果尚未选择)

  • 将配置更改为All Configurations

  • 单击Advanced ...

  • 更改语言版本

希望这会有所帮助。