前面好幾篇文章,老周都跟大伙伴們聊了跟應用程序域有關的話題,干脆咱們一聊到底吧,做學問就應該這樣,有恒心。

App Domain的創(chuàng)建新應用程序域的方法中,有一個特殊的重載:

public static AppDomain CreateDomain(string friendlyName, Evidence securityInfo, AppDomainSetup info, PermissionSet grantSet, params StrongName[] fullTrustAssemblies);

這個重載比較特殊,它與咱們今天扯的話題接近,因為它的參數列表中有一個是 PermissionSet 類型的,它表示一個權限的集合,當創(chuàng)建應用程序域時,通過這個權限集合,限制在新應用程序域中執(zhí)行的代碼的權限。在各個CreateDomain方法的重載中,只有這個有設置權限集的參數。

運用這個重載方法,可以將你覺得要限制權限的代碼放到這個新的應用程序域中執(zhí)行,即創(chuàng)建一個“沙箱”。比如,你拿到別人寫的一個類庫A,不過你不知道這個類庫A在執(zhí)行過程中會干什么,于是,你希望在使用這個來路不明的類庫時,可以限制一下它,例如不讓它讀寫文件,或者說只允許它訪問某些目錄和文件。

 

為了偷工減料,寫出豆腐渣程序,老周舉的這個例子,是把做測試用的代碼寫到主程序集中。它有一個類,類中有一個方法,調用之后,會在“文檔”庫中創(chuàng)建一個文件,然后寫入一些見不得人的內容。