2014-10-09 71 views
2

現狀:不同級別的訪問的方法

我創建2個庫:X1.dll和X2.dll。它們是分別創建和修改的,它們的項目不能合併成一個解決方案。

X1.dll包含類C1的定義。 X2.dll包含類C2的定義。

X2.dll引用X1.dll。

C1類有一個方法M1()。這種方法在X2.dll中使用,這就是爲什麼M1()是作爲公共方法生成的原因。

我將X1.dll和X2.dll分發給其他開發人員。但我不想讓他們打電話給M1() - 他們可以用C1實例做任何他們想做的事情,但不要碰M1()。同時,M1()已經公開,因爲我必須能夠在X2.dll中調用它。

問:

什麼是爲了使其僅適用於我,但仍然沒有爲X1.dll和X2.dll合併項目組織M1()的最好方法?

有很多尷尬的解決方案,如M1()作爲M1(字符串SecreteCode)和硬編碼這個SecreteCode,所以我是唯一一個可以通過它作爲正確的參數。

但是實現此目標的最佳做法是什麼?

感謝您的任何建議!

回答

4

M1()internal並在您的程序集添加InternalsVisibleToAttribute允許X2.dll調用X1.dllinternal代碼。此解決方案使全部internal代碼在X1中可見X2,但您確定沒有其他人打電話給M1()

從文檔:

通常,類型和成員與內部範圍(在C#)和朋友 範圍(在Visual Basic)僅在它們 定義的組件是可見的。 InternalsVisibleToAttribute屬性使它們對指定程序集中的類型也是可見的, 被稱爲 朋友程序集。

只需將[assembly:InternalsVisibleTo("X2")]添加到您的組件。如果您的程序集已簽名,則需要添加強名稱密鑰的公鑰,例如[assembly:InternalsVisibleTo("X2, PublicKey=0000000000")]

這比「密碼」更好,因爲C#代碼易於反編譯,並且您的密碼不會祕密很長一段時間!