簡體   English   中英

應用范圍限制對象,方法等

[英]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.

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