2011-03-15 119 views
0

我有2個項目:範圍修飾符

  1. 類庫包含我 類/業務邏輯
  2. 使用類 庫(DLL)

我一個WPF 應用已被賦予隱藏所有類庫函數和類的任務,以便它不能被外部應用程序調用或使用。

我的問題是,WPF應用程序是一個「外部應用程序」。

我更改了Friend的所有類和屬性的所有公共範圍修飾符。

然後,我嘗試將兩個項目合併成一個解決方案......這當然不起作用。 在包含兩個項目的解決方案中,我也試着改變類庫的「Assembly」以匹配WPF(因爲「Friend」允許同一個程序集中的代碼使用它)......但是這也不起作用。

有誰知道一種方法來完成這個?

感謝

-Frinny

+0

可能重複[限制訪問.NET程序集?](http://stackoverflow.com/questions/1416190/restrict-access-to -net-assembly) – 2011-03-15 14:25:25

+0

我沒有想過要搜索「限制對.NET程序集的訪問」......請注意,這個問題現在已經開始變得更大了,現在我有更多關於InternalsVisibleTo屬性的信息以及更多信息CAS(等)。 – Frinavale 2011-03-15 16:49:03

回答

1

使用InternalsVisibleTo屬性。

+0

感謝您的快速響應!我現在檢查文檔:) :) – Frinavale 2011-03-15 14:22:53

+0

快速問題:我如何找到我的應用程序的公鑰?在文章的底部,提出使用Sn.exe實用程序......然後如果您通過鏈接通知您使用Visual Studio的命令行工具...但即使我安裝了VS2010,我也沒有有Visual Studio命令行工具... – Frinavale 2011-03-15 14:40:35

+0

這真的應該是一個新問題,但Visual Studio的命令行工具只是程序組「Microsoft Visual Studio \ Visual Studio Tools」中的「Visual Studio命令提示符」 – 2011-03-15 14:46:07

1

你應該能夠設置InternalsVisibleTo attribute,使內部類是WPF應用程序可見,這將允許它仍然瑟他們,但其他應用程序也不會能夠。

一些幫助它here

正如已經提到的,這會爲只有最簡單的情況下工作。如果他們想要的話,人們仍然可以使用反射來調用你的方法。

2

如果他們是不同的組件,那麼沒有直接的方法來做到這一點。你可以用InternalsVisibleToAttribute得到一點厚臉皮,但這有點不好意思。

坦率地說,除非你走到極端,否則你不能停止調用你的方法的外部代碼。惡意應用程序可以直接走過去任何修飾,如果他們想反映(因爲調用你可能擁有的AppDomain應用,它可以斷言完全信任)。有一些支持基於呼叫者的安全/權限,但常規的東西很大程度上被「完全信任」所禁用 - 您需要自己檢查呼叫者。不值得,國際海事組織。特別是從4.0代碼訪問權限不再使用(請參閱MSDN

+0

您發佈的鏈接引導我進入CAS的巨大主題。我正在查看.NET 4 Framework中的安全更改(http://bit.ly/a4Hchz)。在.NET 4中,他們改變了一些方法並刪除了一些方法,但功能仍然存在。我不明白的是,政策和運行時間要求將如何防止人們在他們的項目中添加對我的DLL的引用並查看所有類和其成員......?對不起,我的無知(我對此很陌生),但請你澄清你在說什麼? – Frinavale 2011-03-15 16:46:30

+0

我認爲使用InternalsVisibleTo Attribute和CAS(在某種程度上)的組合是我正在尋找的。謝謝@Marc Gravell指出我不會考慮的一些有價值的信息。 – Frinavale 2011-03-16 13:34:21