2012-07-09 164 views
-1

我在我的應用程序引用的NET的DLL。 在訪問其方法在我的C#代碼名爲XYZ之一,我得到一個錯誤:錯誤上訪問一個公共的靜態方法

Attempt by method 'MyClass.ABC()' to access method 'OtherClass.XYZ()' failed.

當我看到在VS.Net中的元數據,我看到它表明,該方法XYZ,因爲只有公共靜態。 請問我在這裏可能會錯過什麼?

謝謝。

+0

,你能否告訴我們呼籲 – Adil 2012-07-09 09:00:28

+0

你能告訴你正在使用訪問方法的代碼公共靜態方法,如果可能的方法你是哪位? – 2012-07-09 09:00:41

+0

請證明一些代碼來檢查。 同時檢查您是否使用了命名空間。還要檢查函數是否僅通過使用類名來調用。 – Narendra 2012-07-09 09:03:44

回答

0

你需要使用類名來稱呼它。對於當調用例如

public static class MyClass 
{ 
    public static void MyMethod() 
    { // Do something 
    } 
} 

你需要使用

MyClass.MyMethod(); 
+0

換句話說,你需要使用的類型訪問靜態方法並使用對象實例訪問動態方法。 – 2012-07-09 09:09:33

+0

編輯了我的問題。謝謝。 – Jimmy 2012-07-09 10:34:58

+0

嘗試檢查訪問修飾符。你確定你的班級和方法在範圍內嗎? – 2012-07-10 11:00:24

0

我有同樣的問題 - 這是我的情況下發生了什麼:

  1. 我有一個裝配my.dll這定義internal static void Foo();
  2. my.dll定義[assembly:InternalsVisibleTo("unittests")]

  3. 我有一個測試程序集unittests.dll,它調用Foo()。

  4. 我有展開時my.dll和unittests.dll test.localtestsettings。

通過一些mumbo jumbo,testsettings文件正在部署一個沒有AttributeInternalsVisibleTo的過時版本的a.dll。

這可把我當代碼經過編譯時檢查,但在運行時扔了MethodAccessException的位置。原因在我的情況是一個內部方法從一個程序集調用它不應該是可見的。這是一種我不喜歡調試的安全異常。祝你好運。