Vb.net 类访问自己的字段时发生FieldAccessException(.NET project从3.5升级到4.0)

Vb.net 类访问自己的字段时发生FieldAccessException(.NET project从3.5升级到4.0),vb.net,.net-4.0,Vb.net,.net 4.0,我有一个VB.NET解决方案,刚从3.5升级到4.0。其中一个类具有专用字段: Private _Projection As ICalculatedPath 在运行时,每当包含该字段的类访问该字段时,我都会得到一个FieldAccessException。第一次访问该字段是在方法中进行空检查,我随机尝试的一件事是将上面的行更改为: Private _Projection As ICalculatedPath = Nothing 当我这样做时,我在那一行得到FieldAccessExcepti

我有一个VB.NET解决方案,刚从3.5升级到4.0。其中一个类具有专用字段:

Private _Projection As ICalculatedPath
在运行时,每当包含该字段的类访问该字段时,我都会得到一个FieldAccessException。第一次访问该字段是在方法中进行空检查,我随机尝试的一件事是将上面的行更改为:

Private _Projection As ICalculatedPath = Nothing
当我这样做时,我在那一行得到FieldAccessException,表示类的.ctor()无法访问该字段。我还尝试过使field protected and public、clean/rebuild解决方案公开,重新启动VS,针对解决方案中的每个项目专门针对x86和.NET 4.0,以及其他非理性的措施来消除此异常,但没有效果。当然,这段代码在升级之前运行良好


升级过程中可能出了问题?我真的不知道该怎么想。

您是否也在同一个类中明确声明了一个名为
Projection
的属性?VB.NET会自动为您声明的任何自动属性创建一个带有前导下划线的专用字段。因此,如果您将
公共属性项目设置为ICalculatedPath
,而没有声明getter和setter(这称为自动属性,我相信它是在VB.NET 4.0中引入的),VB.NET将自动生成
\u投影
。在这种情况下,程序将在同一范围内有两个具有相同声明的变量,这将是一个问题。

看起来这与.NET 4.0中对代码访问安全性的弃用有关。包含此类的程序集的AssemblyInfo.vb中包含以下内容:

<Assembly: AllowPartiallyTrustedCallers()> 

删除该属性会导致FieldAccessException不发生。我不知道为什么会这样,但它确实排除了例外。如果有人能填写更多的细节,我相信他们会对将来发现这个问题的人有用


在我们的例子中,这个属性是必需的,因为我们将MS ReportViewer控件用于嵌套对象数据源。我们不再需要它,所以摆脱它不是问题,这是一个令人高兴的巧合。

我有一个名为Projection的属性,但它不是自动实现的(只是一个在3.5中工作的标准只读属性)。