我最近对.net 4.0 / Visual Studio 2010中按合同进行静态检查设计的想法感到兴奋。
但是我很遗憾地发现它只能在Visual Studio Team System中使用。 http://msdn.microsoft.com/en-us/devlabs/dd491992.aspx
是否有任何替代方案可以通过合同对c#进行静态检查设计?
单声道项目是否会将这种功能性添加到编译器中?
答案 0 :(得分:3)
他指的是定理证明。
没有什么可以阻止开源或商业社区实施自己的。合同类是BCL的一部分,很容易添加到Mono中。如果我们想静态检查事物,“我们”需要制定一个定理证明器。
证明者不是编译器的一部分。它主要运行如下:
CONTRACTS_FULL
的二进制版本。这将发出所有Contract属性并调用Contract
类静态方法。随着工具变得更好,它将从对每个合同发出警告,最终向Microsoft版本提供类似的证明结果。
编辑:伙计,如果Reflector是开源的,那将是非常好的。第一遍实现当然可以作为插件运行。这样,可以设计证明器逻辑而不必担心如何加载二进制文件。一旦它证明了功能(得到它?),逻辑可以被提取和构建,以操作由另一个程序集加载器(一个是开源的)生成的语法树。这里重要的/新颖的是证明器逻辑 - 装配装载器已经多次完成,没有任何变化可以用于此用途。
答案 1 :(得分:0)
代码协定不需要C#编译器,因为它们是作为.NET Framework 4.0中的类实现的。任何可以发出托管程序集的.NET编译器都是可用的,尽管在混合托管代码和本机代码时C ++ / CLI可能会发出不兼容的程序集。
IDE还执行了其他工具来重写生成的IL,以便合同显示在正确的位置,因此Mono项目作者需要为Mono平台上的合同编写类似的工具。
有关详细信息,请参阅this post。