Class访问自己的字段时的FieldAccessException(.NET项目从3.5升级到4.0)

时间:2010-08-06 19:15:23

标签: vb.net .net-4.0

我有一个VB.NET解决方案,刚刚从3.5升级到4.0。其中一个课程有私人领域:

Private _Projection As ICalculatedPath

在运行时,只要包含该字段的类访问该字段,我就会收到FieldAccessException。该字段第一次被访问是一个方法中的空检查,我随机尝试的一件事是将上面的行改为:

Private _Projection As ICalculatedPath = Nothing

当我这样做时,我在该行上得到FieldAccessException,表示类的.ctor()无法访问该字段。我也试过让字段受保护和公共,清理/重建解决方案,重新启动VS,专门针对解决方案中的每个项目的x86和.NET 4.0,以及其他非敏感措施来摆脱这个例外但无济于事。当然,此代码在升级之前工作正常。

升级过程中可能出现了问题?我不太确定在这里想什么。

2 个答案:

答案 0 :(得分:3)

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

<Assembly: AllowPartiallyTrustedCallers()> 

删除该属性会导致不发生FieldAccessException。究竟是这种情况的原因,我不知道,但确实摆脱了异常。如果有人可以填写更多详细信息,我相信它们对将来发现此问题的任何人都有用。

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

答案 1 :(得分:0)

你是否也在名为Projection的同一个类中明确声明了一个属性? VB.NET会自动为您声明的任何自动属性创建一个带有前导下划线的私有字段。因此,如果你有Public Property Project As ICalculatedPath没有声明的getter和setter(这被称为自动属性,我相信在VB.NET 4.0中引入),VB.NET将自动生成_Projection。在这种情况下,程序将在同一范围内具有两个具有相同声明的变量,这将是一个问题。