C# 方法中/中的编译器异常

C# 方法中/中的编译器异常,c#,C#,背景: 我们有一个遗留库,其中一个特定的方法返回一个非托管资源(文件句柄)。此库的使用者使用该文件句柄,并在使用完该文件句柄后进行处置。库当前外部化了dispose,因为只有使用者可以指定何时可以安全地进行dispose 在某些情况下也会发生这种情况,消费者甚至在完成任务后仍按原样离开文件处理程序,这会导致内存泄漏。为了避免这种情况,我们正在对消费者调用进行标准化,其中消费者调用确定地处理文件句柄 问题:如果方法不符合任何要求的标准,是否可以从方法中/在方法中引发编译器异常。例如:我们希望确保使

背景: 我们有一个遗留库,其中一个特定的方法返回一个非托管资源(文件句柄)。此库的使用者使用该文件句柄,并在使用完该文件句柄后进行处置。库当前外部化了dispose,因为只有使用者可以指定何时可以安全地进行dispose

在某些情况下也会发生这种情况,消费者甚至在完成任务后仍按原样离开文件处理程序,这会导致内存泄漏。为了避免这种情况,我们正在对消费者调用进行标准化,其中消费者调用确定地处理文件句柄

问题:如果方法不符合任何要求的标准,是否可以从方法中/在方法中引发编译器异常。例如:我们希望确保使用者在其实现中处理文件句柄,如果没有,则抛出编译器生成的异常。
我们对任何方法都持开放态度,包括自定义属性、自定义fxcope规则等。

听起来像是自定义fxcop规则的工作,或者可能是roslyn(ctp)-但是,处理所有情况都非常复杂(想想:停止问题)-您可能能做的最好的事情是“明显的”usesA编译器无法确定在运行时发生了什么。。。这可能是一个运行时例外。您可以创建一个新的API来包装遗留库吗?您的新API使用者将访问(而不是直接访问遗留库)。在这一点上,您可能可以更好地管理使用,比如通过实现
IDisposable
,或者保留一个计时器在合理的时间后自动处理资源,实现析构函数(考虑到它们的所有警告),或者按照您的意愿。@bash.d编译器(或者更准确地说:构建时代码分析工具,而不是编译器本身)可以分析调用方,尽管您返回的是IntPtr?这当然非常麻烦,没有什么可以阻止您通过添加另一个正确的方法来改进代码。