框架 4.7.2 中使用的 C#8 功能不会在 Visual Studio 中导致生成错误,但在 TFS 上会导致生成错误

Bra*_*ner 2 c# tfs

我有一个适用于 .NET Framework 4.7.2 的 C# 类库。我的一位开发人员添加了一个接口,并将一些成员标记为public,仅使用 C# 8 支持。他的计算机和我的计算机都没有给出有关此问题的任何错误或警告,这使其无法通过代码审查。然而我们的 TFS 服务器抛出了正确的错误。

界面:

public interface IHintManager
{
    public void AddJoinHint(string leftTable, string rightTable, JoinHint hint);
    public void AddQueryHint(QueryHint hint);
    public void AddTableHint(string table, TableHint hint);
    void InjectHints(DbContext context, DbCommand command, DbInterceptionContext interceptionContext);
}
Run Code Online (Sandbox Code Playgroud)

.csproj 设置为 4.7.2:

<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
Run Code Online (Sandbox Code Playgroud)

TFS 错误:

在此输入图像描述

本地构建输出:

在此输入图像描述

为什么我们不会在本地看到此错误?为了将来在本地开发人员和 TFS 之间获得一致的构建结果,我们需要更改哪些内容?

Mat*_*son 5

有人可能在过去更改了项目设置(当它是 Visual Studio 2017 项目时)以启用对早期语言版本(例如 C# 7)的支持。

检查“.csproj”文件中是否<LangVersion>latest</LangVersion>有 或<LangVersion>8.0</LangVersion>,如果找到则将其删除。

VS2019 使用选定的 .Net Framework 版本来确定支持的 C# 语言版本,除非它被上述版本覆盖。

对于 VS2017,您可以通过项目设置选择使用最新的语言版本(无需编辑 .CSProj 文件),如果您这样做,升级到 VS2019 后它将允许使用 C#8...

由于这一系列事件,我们遇到了与您完全相同的问题。我们现在认为使用<LangVersion>latest</LangVersion>不再安全,因为升级到较新版本的 Visual Studio 后,您最终可能会意外启用比预期更高版本的 C# 语言。