应用范围限制对象,方法等

时间:2009-05-27 07:46:55

标签: c# .net visual-studio

我有一个非常理论化的问题:有没有办法禁止在C#,。Net和/或Visual Studio中的应用程序/项目映射中使用某些方法,对象等?

更具体一点:我正在开发一个DMS系统,永远不可能从存档中删除文件。存档文件只是Windows文件夹结构中的文件。

因此,每当有人试图执行System.IO.File.Delete()时,都应禁止此操作。相反,我会强制使用自定义的FileDelete()方法,该方法始终确保要删除的文件不是存档内的文件。 (这不一定是自动发生的。当有错误/异常通知开发人员被禁止的方法调用时,就可以了。)

实现它的另一种方法是在运行时观察System.IO.File.Delete()的所有调用,捕获它们并执行我自己的FileDelete()方法。

当然,这些都是一个真正的理论问题,但我只知道是否有办法实现这一点。

P.S。:我在Visual Studio 2005中使用C#。因此,如果我可以通过我的编程语言或Visual Studio(或者我忘记的任何其他方式)来实现这一点并不重要。

6 个答案:

答案 0 :(得分:3)

控制归档文件的删除权限会不会更简单?

答案 1 :(得分:1)

您可以定义方法并使用声明性安全属性来装饰它们 http://msdn.microsoft.com/en-us/library/dswfd229.aspx

HTH

答案 2 :(得分:0)

不适用于现有的库函数。

对于自己的代码,您可以在方法上应用代码访问安全性,但运行为“完全信任”的代码将轻松过去;所以要通过反射检查滥用情况,您可能需要手动检查来电者(Assembly.GetCallingAssembly) - 这很痛苦,但仍然不是100%健壮...

有特定的文件/ IO权限,但再次完全信任将忽略它。

我认为“不”是一个更安全的答案。

答案 3 :(得分:0)

您可以采取的一种方法是创建一个特殊的用户帐户,并仅授予该帐户删除文件所需的权限。 请记住,用户可以控制他的计算机(如果他有管理权限;)虽然你可以在他的方式上设置一些障碍,但你真的无能为力(这就是应该的方式)。

答案 4 :(得分:0)

为这种情况编写自己的FxCop规则怎么样?

如果将警告视为错误,则使用此规则将无法进行编译。

答案 5 :(得分:0)

我能找到最接近解决方案的是编写自己的System.IO.File类并将其保存在exe项目中。这样你就会得到一个歧义编译错误,可以通过在别名中给你自己的实现来解决(使用File = System.IO.File,Version = [version],cultuer = [correct culture],publicKey = [public key] ])。如果你不确定要写什么做一个断点,并在即时窗口中写出类似?typeof(System.IO.File).AssemblyQualifiedName。

这不是防弹,但至少它会强制开发人员对决策有所了解,你甚至可以(我本人不会这样做)更改默认的类模板以包含每个类的using指令

相关问题