的另一個選項檢查您可以使用裝配上的強名稱鍵來執行此操作。
首先確保調用組件(組件A)是強名稱簽名(這可以在項目屬性進行簽名選項卡下的屏幕)
下面的代碼將檢索調用程序集強名稱密鑰。
internal static StrongName GetStrongName(Evidence evidence)
{
foreach (var e in evidence)
{
if (e is StrongName)
{
return (StrongName)e;
}
}
throw new ArgumentException();
}
最簡單的方法是用相同的強名稱簽署這兩個組件,然後驗證Assembly.GetCallingAssembly()證據和Assembly.GetExecutingAssembly()。證據是由同一強名稱簽名。
var callerKey = GetStrongName(Assembly.GetCallingAssembly().Evidence).PublicKey;
var execKey = GetStrongName(Assembly.GetExecutingAssembly().Evidence).PublicKey;
if (callerKey != execKey)
{
throw new UnauthorizedAccessException("The strong name of the calling assembly is invalid.");
}
這可能是不切實際的實現在現有的代碼庫,但是看看LinFu AOP,你應該能夠實現一個可以連接到需要被檢查的有效呼叫者類的屬性。
那麼,爲什麼你需要強迫人們不要使用他們甚至不感興趣的東西? – SamB 2010-06-05 20:05:18
而且,如果事實證明你想阻止人們做他們實際上有興趣做的事情,那麼這可能不會對付一個即使是輕度決心的對手 - 也不可能很難替代組件上的簽名(帶有來自不同鍵的簽名)並更改任何硬編碼鍵以匹配... – SamB 2010-06-05 20:10:25