迁移到.Net4后,C#错误“语言不支持”

我正在尝试将我们的网站从.Net 3.5迁移到4,我遇到了一个非常奇怪的问题。

一旦我以.Net4为目标,在3.5中工作得很好的代码就不再存在了,给了我错误

“语言不支持xxx”。

TimeZoneInfo tzi = !calendarItem.UseUserTimeZone ? user.Settings.TimeZoneInfo : l.TimeZoneItem.Info; 

在该行代码上,错误显示在“ .TimeZoneInfo ”和“ .Info ”两者中,类型为“ System.TimeZoneInfo ”。

user.Settings.TimeZoneInfo属性的定义是:

 public TimeZoneInfo TimeZoneInfo { get { return World.TimeZones[Convert.ToInt32(this[Setting.TimeZoneInfo])].Info; } set { this[Setting.TimeZoneInfo] = value.ToTimeZoneItem().Id.ToString(); } } 

l.TimeZoneItem.Info属性的定义是:

 public TimeZoneInfo Info { get { return info; } } 

不确定这里发生了什么。 请帮助那个。

这可能是一个assembly不一致的问题。 当我想使用一个与另一个项目创建循环引用的程序集时,我遇到了这个问题。 一旦我修复了这个循环引用问题,错误就不再出现了。

当较低的库使用不同版本的.NET Framework时,也会发生这种情况。 有一个类似的问题,当我将Lower Libraries更新为3.5框架并将实际库更新到3.5框架时,问题就消失了。

对我来说,这是由于在c#7中使用多个返回值时缺少或过时的System.ValueTuple

错误消息有点误导。

以不同方式调用属性字段可能有所帮助。 因为TimeZoneInfo也是System命名空间中的一个类。

与Jonathan Perry的回答类似,在我的例子中,我提到了一个旧的程序集,而不是编译的程序集。 我删除了引用并再次添加指向正确的dll。

与其他一些post类似,在我的情况下,我完全错过了对程序集的引用。 它不是从我正在使用的项目中直接访问的,而是在我引用的另一个链接项目中访问的。

当程序集中缺少某个程序集中的某个其他程序集引用时,也会发生这种情况

与此处的其他类似,如果引用的程序集针对“任何CPU”,而当前程序集针对“任何CPU”将导致问题(至少在64位计算机上)。