2010-08-06 48 views
1

我有一個VB.NET解決方案,從3.5升級到4.0。其中一個類有一個私有字段:當類訪問自己的字段(.NET項目從3.5升級到4.0)時FieldAccessException

Private _Projection As ICalculatedPath 

在運行時,任何時候包含該字段的類訪問該字段,我都會得到一個FieldAccessException。第一次發現場偶然得到訪問的是一個方法,一個空的檢查,我隨意嘗試的改變上述行的一件事:

Private _Projection As ICalculatedPath = Nothing 

當我這樣做,我得到了FieldAccessException表示該類的.ctor()不能訪問該字段。我也嘗試過使用受保護的公共,清理/重建解決方案,重新啓動VS,針對x86和.NET 4.0特別針對解決方案中的每個項目,以及其他非理性措施來擺脫此異常,但無濟於事。當然,這個代碼在升級之前工作得很好。

升級過程中可能出錯了嗎?我不確定在這裏想什麼。

回答

3

看起來這與.NET 4.0中代碼訪問安全性的棄用有關。包含此類的程序集的AssemblyInfo.vb中包含以下內容:

<Assembly: AllowPartiallyTrustedCallers()> 

刪除該屬性將導致FieldAccessException不發生。確切的原因是這種情況,我不知道,但它確實消除了這種異常。如果有人可以填寫更多的細節,我相信他們將會對將來發現這個問題的任何人都有用。

在我們的例子中,這個屬性是必需的,因爲我們使用MS ReportViewer控件和嵌套的對象數據源。我們不再需要它,所以擺脫它不是一個問題是一個愉快的巧合。

+0

非常感謝!這是相當棘手的錯誤。 – Dmitry 2010-12-21 09:09:58

0

你是否還在同一個類中聲明瞭一個名爲Projection的屬性? VB.NET會自動爲您聲明的任何自動屬性創建一個帶有前導下劃線的私有字段。因此,如果您的Public Property Project As ICalculatedPath沒有聲明的getter和setter(這稱爲自動屬性,我相信它是在VB.NET 4.0中引入的),VB.NET將自動生成_Projection。在這種情況下,程序會在同一範圍內有兩個具有相同聲明的變量,這是一個問題。

+0

我確實有一個名爲Projection的屬性,但它不是自動實現的(只是在3.5中工作的標準只讀屬性)。 – 2010-08-06 20:33:14

相關問題