我有一个适用于 .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 之间获得一致的构建结果,我们需要更改哪些内容?
有人可能在过去更改了项目设置(当它是 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# 语言。