framework 4.7.2中使用的C#8特性不会在Visual Studio中导致生成错误,但会在TFS上导致生成错误

framework 4.7.2中使用的C#8特性不会在Visual Studio中导致生成错误,但会在TFS上导致生成错误,c#,tfs,C#,Tfs,我有一个用于.NETFramework 4.7.2的C#类库。我的一位开发人员添加了一个接口,并将一些成员标记为public,这仅在使用C#8时才受支持。无论是他的电脑,还是我的电脑,都没有给出关于这个问题的任何错误或警告,这使得它无法通过代码审查。但是,我们的TFS服务器抛出了正确的错误 界面: public interface IHintManager { public void AddJoinHint(string leftTable, string rightTable, Joi

我有一个用于.NETFramework 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);
}
.csproj设置为4.7.2:

<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
v4.7.2
TFS错误:

本地生成输出:


为什么我们不能在本地看到这个错误,我们需要做哪些更改才能在本地开发人员和TFS之间获得一致的构建结果?

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

检查“.csproj”文件中是否有
最新版本
8.0
,如果找到,请将其删除

VS2019使用所选的.Net framework版本来确定支持的C语言版本,除非它被上述内容覆盖

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


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

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

检查“.csproj”文件中是否有
最新版本
8.0
,如果找到,请将其删除

VS2019使用所选的.Net framework版本来确定支持的C语言版本,除非它被上述内容覆盖

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


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

现在,为什么还要向成员添加
public
,因为这是一个接口,所以默认情况下,这些成员都是。删除
public
并重试。尝试将
latest
添加到您的
。cspoj
文件
LangVersion
已设置为latest。@chođxě。OP询问C#8@PavelAnikhouski那么,接口成员声明没有改变。。。我保证删除显式的
public
会解决这个问题。现在,为什么还要将
public
添加到成员中,因为它是一个接口,所以默认情况下它们都是。删除
public
并重试。尝试将
latest
添加到您的
。cspoj
文件
LangVersion
已设置为latest。@chođxě。OP询问C#8@PavelAnikhouski那么,接口成员声明没有改变。。。我保证删除显式的
public
将解决此问题。
我们现在决定使用最新版本不再安全
当然,如果您说要使用最新版本,您需要遵守该版本。。。这是很容易被忽略的事情。。。再一次,代码审查,实际代码审查会发现这一点,JMHO。@chođěxěŕ实际上,设置没有出现在代码中。它位于.CSProj文件中,可以通过使用VS2017(实际情况就是这样)的项目属性修改设置,而不是通过编辑.CSProj文件。错误在于,有人在项目设置中选择了“最新版本”而不是“c#7”,在我们开始使用VS2019之前,没有人注意到!当然,你可能会争辩说人们也应该审查对.csproj文件的更改,但这似乎很容易被忽视。@Mattew Watson我们审查所有新的、修改过的文件,都是因为这些确切的原因;这是我们审查过程的一部分。正如您所看到的,项目文件中可能会发生很多事情,但会被忽略。很高兴你找到了解决办法
我们现在决定使用最新版本不再安全
当然,如果你说要使用最新版本,你需要遵守该版本。。。这是很容易被忽略的事情。。。再一次,代码审查,实际代码审查会发现这一点,JMHO。@chođěxěŕ实际上,设置没有出现在代码中。它位于.CSProj文件中,可以通过使用VS2017(实际情况就是这样)的项目属性修改设置,而不是通过编辑.CSProj文件。错误在于,有人在项目设置中选择了“最新版本”而不是“c#7”,在我们开始使用VS2019之前,没有人注意到!当然,你可能会争辩说人们也应该审查对.csproj文件的更改,但这似乎很容易被忽视。@Mattew Watson我们审查所有新的、修改过的文件,都是因为这些确切的原因;这是我们审查过程的一部分。正如您所看到的,项目文件中可能会发生很多事情,但会被忽略。很高兴你找到了解决办法!