[英]Application-wide Restriction of objects, methods etc
我有一個非常理論化的問題:有沒有辦法禁止在C#,。Net和/或Visual Studio中的應用程序/項目映射中使用某些方法,對象等?
更具體一點:我正在開發一個DMS系統,永遠不可能從存檔中刪除文件。 歸檔文件只是Windows文件夾結構中的文件。
因此,每當有人試圖執行System.IO.File.Delete()時,都應該禁止這樣做。 相反,我會強制使用自定義的FileDelete()方法,該方法始終確保要刪除的文件不是存檔內的文件。 (這不必自動發生。當有錯誤/異常通知開發人員禁止方法調用時,它是可以的。)
另一種實現方法可能是在運行時觀察System.IO.File.Delete()的所有調用,捕獲它們並執行我自己的FileDelete()方法。
當然這些是一個真正的理論問題,但我只知道是否有辦法實現這一點。
PS:我在Visual Studio 2005中使用C#。因此,如果我能通過我的編程語言或Visual Studio(或者我忘記的任何其他方式)實現這一點並不重要。
控制對歸檔文件的刪除權限不是更簡單嗎?
您可以定義方法並使用聲明性安全屬性來裝飾它們http://msdn.microsoft.com/en-us/library/dswfd229.aspx
HTH
不適用於現有的庫函數。
對於您自己的代碼,您可以在方法上應用代碼訪問安全性,但是作為“完全信任”運行的代碼將輕松過去; 所以要通過反射檢查濫用,你可能需要手動檢查調用者( Assembly.GetCallingAssembly
) - 這很痛苦,但仍然不是100%健壯...
有特定的文件/ IO權限,但再次完全信任將忽略它。
我認為“不”是一個更安全的答案。
您可以采用的一種方法是創建一個特殊的用戶帳戶,並僅授予該帳戶刪除文件所需的權限。 請記住,用戶可以控制他的計算機(如果他有管理權限;)雖然你可以在他的方式上設置一些障礙,但你真的無能為力(這就是應該的方式)。
如何為該案例編寫自己的FxCop規則?
有了這樣的規則,如果將警告視為錯誤,則無法進行編譯。
我能找到最接近解決方案的是編寫自己的System.IO.File類並將其保存在exe項目中。 這樣你就會得到一個歧義編譯錯誤,可以通過在別名中給你自己的實現來解決(使用File = System.IO.File,Version = [version],cultuer = [correct culture],publicKey = [public key] ])。 如果你不確定要寫什么作出一個斷點,並在即時窗口中寫出類似?typeof(System.IO.File).AssemblyQualifiedName的內容。
這不是防彈,但至少它會強制開發人員對決策有所了解,你甚至可以(我本人不會這樣做)更改默認的類模板以包含每個類的using指令
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.