在.NET的安全系統是相當複雜的。我不確定答案是如乍一看那樣簡單。即使您有一個組件,仍然會執行安全檢查。當您啓動一個包含所有邏輯的應用程序時,您不會繞過用於程序集加載和驗證的.NET安全檢查,也不會繞過類型繼承檢查。但是,一旦安全性在特定範圍內得到驗證,它通常不會再次發生(可能會有一些緩解情況,會強制重新驗證證據。)
多個程序集不會有任何不同的行爲。可能會有一些額外的裝配成本和初始類型訪問成本,因爲每個新裝配將需要這些初始安全檢查。但是,與JITting代碼本身的過程相比,這些檢查通常會顯得蒼白無力。
除了基本的組件負載和類型安全檢查,你也可以有明確的權限要求。微軟系統命名空間充斥着Demand和LinkDemand安全檢查,這些安全檢查驗證堆棧(需求)中的所有呼叫者或直接呼叫者(鏈路需求)是否有權進行呼叫。 (你的代碼也應該包括這樣的檢查,以確認調用者是否具有適當的權限。)無論代碼在哪裏居住......在本地,在另一個程序集或甚至在另一個應用程序域的程序集中,這些安全檢查都會發生。但是,一旦進入到其他應用程序域或進程,甚至服務和其他服務器的調用中,封送這些調用和建立連接的開銷就會更加昂貴。
這甚至不是全貌,當談到.NET安全。一些安全檢查比其他安全檢查更昂貴。有些需要證書,有些則需要證據等。安全性不是你可以推卸的東西......它是現代軟件開發的一個基本和重要組成部分。我不會太擔心安全成本......因爲它在.NET框架和CLR中得到很好的實施和優化。我會盡力確保您的應用程序的架構和組織得當。如果將代碼分離爲多個程序集是合乎邏輯的,減少維護,部署和重構工作,那麼它的WELL值得的安全成本很小。
@Andrew:完成。 – dewald 2009-08-30 22:31:34