Azure DevOps发布流水线无法使用最新的C#版本

6

我有一个控制台应用程序,其中包含异步调用。例如,主方法的签名如下:

static async Task MainAsync(string[] args)
{

}

我能在本地机器上编译构建。但是我有一个 VSTS (DevOps Azure) CI/CD 管道,在那台机器上使用自定义托管代理,一旦执行CI就会出现以下错误:

##[error]CSC(0,0): Error CS5001: Program does not contain a static 'Main' method suitable for an entry point


我正在使用自定义托管代理在那台机器上。但这还不够。请记住,在您的机器上可能有多个MSBuild实例,https://blog.lextudio.com/the-rough-history-of-msbuild-cc72a217fa98 您的管道定义必须指向最新的MSBuild实例,以便使用最新的C#编译器。 - Lex Li
3个回答

5
我通过强制用户代理使用VS2017使其正常工作。 点击第1阶段,然后将其更改为以下内容: HostedVS2017 这会强制用户代理使用具有最新版本C#的2017而不是2015(它对我而言是回退到的版本)。

这对我有用。各种网站上的各种线程都在说“设置langver属性”,但都没有起作用。这个做到了!谢谢!!! - eidylon

3
请尝试以发布模式构建本地代码,看看是否遇到相同的问题。
请确保将C# 7.1添加到任何CPU和发布属性组中。
  • 右键单击您的项目,单击“属性”

  • 如果未选择,请单击“生成”

  • 将配置更改为所有配置

  • 单击“高级...”

  • 更改语言版本

有关更多详细信息,请参阅github上的此问题。

https://github.com/dotnet/roslyn/issues/21783


3

https://www.visualstudiogeeks.com/azure/devops/using-latest-version-of-csharp-with-dotnetcore

在流水线中,在 Visual Studio 构建时,添加到 MSBuild 参数

/property:langversion=latest

或者

编辑 C# 项目并添加

<LangVersion>latest</LangVersion>

  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <PackageAction>BuildDefault</PackageAction>
    <LangVersion>latest</LangVersion>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <PackageAction>BuildDefault</PackageAction>
    <LangVersion>latest</LangVersion>
  </PropertyGroup>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接