我真的想在Visual Studio 2010中尝试新的代码契约,但我不想为Visual Studio安装额外的扩展(因为我的代码与我的同事共享)。 现在,当面向.NET 4.0时,我可以使用新的System.Diagnostics.Contracts命名空间,但我还没有做任何事情。
例如,使用
static void Main(string[] args)
{
Greet(null);
Console.ReadLine();
}
private static void Greet(string name)
{
Contract.Requires(name != null);
Console.Out.WriteLine("Hello {0}", name);
}
程序编译并运行(显示“Hello”),没有任何警告。如果我尝试使用Contract.Requires<ArgumentNullException>(name != null)
,我会收到一条消息,告诉我必须使用重写器,无论名称的值如何。
谷歌告诉我,当我安装Code Contracts premium时,我可以获得任何魔力,但是当我不安装时,这个命名空间的目的是什么?我可以将代码合约用于除开箱即用的精心评论之外的其他内容吗?
答案 0 :(得分:6)
好吧,如果你定义了CONTRACTS_FULL
预处理器符号,那么由于没有运行重写器(根据注释),各种Contract.*
方法将失败。除非您定义预处理器符号,否则它们将在编译时被忽略。
在框架中包含最低限度的Code Contracts类是为了在部署代码时不必安装额外的软件 - 但是你做需要安装额外的工具以进行构建时后处理。
答案 1 :(得分:2)
我想答案是您反对安装扩展程序。开箱即用的合同意味着您可以使用您希望的合同,您的同事将能够编译代码而无需安装任何扩展。
然后您可以继续安装扩展程序并从合同中获得真正的好处,而不会对您的同事施加任何新的要求