代码之家  ›  专栏  ›  技术社区  ›  Andy Morris

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

  •  1
  • Andy Morris  · 技术社区  · 14 年前

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

    Private _Projection As ICalculatedPath
    

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

    Private _Projection As ICalculatedPath = Nothing
    

    当我这样做时,我在那一行得到FieldAccessException,表示类的.ctor()无法访问该字段。我还尝试过让field protected和public,clean/rebuild解决方案,重新启动VS,在解决方案中的每个项目上专门针对x86和.net4.0,以及其他一些非敏感的措施来消除这个异常,但是没有效果。当然,这段代码在升级之前运行得很好。

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

    2 回复  |  直到 14 年前
        1
  •  3
  •   Andy Morris    14 年前

    这似乎与.NET4.0中对代码访问安全性的反对有关。包含此类的程序集在其AssemblyInfo.vb中具有以下内容:

    <Assembly: AllowPartiallyTrustedCallers()> 
    

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

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

        2
  •  0
  •   Ben McCormack    14 年前

    Projection ? VB.NET会自动为您声明的任何自动属性创建一个带有前导下划线的专用字段。所以如果你有 Public Property Project As ICalculatedPath 如果没有声明的getter和setter(这称为automatic属性,我相信它是在VB.net4.0中引入的),VB.NET将自动生成 _Projection