Jen*_*ens 4 c# visual-studio-2010 code-contracts
我真的想在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);
}
Run Code Online (Sandbox Code Playgroud)
程序编译并运行(显示"Hello"),没有任何警告.如果我尝试使用Contract.Requires<ArgumentNullException>(name != null),我会收到一条消息,告诉我必须使用重写器,无论名称的值如何.谷歌告诉我,当我安装Code Contracts premium时,我可以获得任何魔力,但是当我不安装时,这个命名空间的目的是什么?我可以将代码合同用于除开箱即用的精心评论之外的其他内容吗?
好吧,如果你定义了CONTRACTS_FULL预处理器符号,那么Contract.*由于没有运行重写器,各种方法都会失败(根据注释).除非您定义预处理器符号,否则它们将在编译时被忽略.
在框架中包含最小的Code Contracts类是为了在部署代码时不必安装额外的软件- 但是你需要安装额外的工具才能进行构建时的后处理.