迁移到.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位计算机上)。