簡體   English   中英

限制.DLL訪問

[英]Restricting .DLL access

假設我有兩個.dll,Dll1和Dll2。

DLL1使用或調用DLL2。

有沒有辦法可以確保它是DLL1,只有DLL1誰調用DLL2?

更新1

這背后的原因是:

我有一個WinForms解決方案,為了簡單起見,它包含一個視圖項目和一個控制器項目(生成一個單獨的.dll)。 在客戶端計算機上安裝應用程序后,我意識到可以在其“Program Files”文件夾中查看應用程序.dll。 有人可能會添加對控制器的.dll的引用。 我想避免這種情況,以便它是視圖項目,只有正在進行調用的視圖項目。

更新2
我喜歡將控制器分成單獨項目的原因之一是我可能有許多不同的視圖項目調用並使用相同的控制器。 然后,我只需要為所有視圖維護一個控制器項目。 例如,win表單應用程序和測試項目甚至是使用相同控制器項目的網站。 但是采用這種方法,我將面臨我提到的安全問題(避免和控制我的dll的不當使用)。

所以我有一種方法,編譯為一個.dll,使用不同的文件夾,我認為這是正確的並解決了我的安全問題,但它讓我只有一個視圖。

另一方面,如果我有單獨的項目,我面臨安全問題。

我仍然懷疑我應該怎么做,因為我仍然希望繼續使用不同的項目,因為我提到的原因。

更新3
有關使用StrongNameIdentityPermission權限要求的任何建議嗎?
http://msdn.microsoft.com/en-us/library/ff648663.aspx (請參閱:限制哪些代碼可以調用您的代碼)
http://blogs.msmvps.com/manoj/2004/10/20/tip-strongnameidentitypermission/ http://www.morganskinner.com/Articles/StrongNameIdentityPermission/

謝謝

您可以將DLL2中的所有類型設置為internal並使用InternalsVisibleToAttribute其設置為DLL1。

為確保不會破壞它,您應該簽署DLL1並確保在屬性中使用其公鑰。


或者,作為兩個DLL的作者,考慮將項目組合成一個 - 將DLL2中存在的所有公共方法設置為internal ,如前所述,但現在只存在DLL1並且它們只能由它訪問。


注意:以上所有假設均未使用反射。

您可以使用Reflection來檢查當前的callstack。 說我可能不會這樣做,因為它昂貴而且速度慢。

你可以這樣得到stacktrace:

using System.Diagnostics;

// get call stack
StackTrace stackTrace = new StackTrace();

// get calling method name
Console.WriteLine(stackTrace.GetFrame(1).GetMethod().Name);

您可以使用ILMerge將輸出合並到單個exe中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM