我在 Visual Studio 2010 中的代码合同工作正常,但我无法ccrewrite.exe
从命令行做任何有用的事情。这是一个示例应用程序:
using System.Diagnostics.Contracts;
public class Dummy
{
public static void Main(string[] args)
{
Contract.Requires(args.Length > 0);
}
}
然后我编译代码并在其上运行 ccrewrite.exe:
> csc /debug+ /D:CONTRACTS_FULL Dummy.cs
> ccrewrite /o:RewrittenDummy.exe Dummy.exe
elapsed time: 61ms
之后就没有RewrittenDummy.exe
文件了。
我已经尝试了很多选项,但没有任何区别。我注意到的几件事:
- 它肯定在加载 Dummy.exe,因为如果我指定一个不存在的文件,它就会死掉
- Dummy.exe 肯定包含对 Contract 的引用——如果我在没有参数的情况下运行它,它会适当地失败(但如果它被重写,错误消息没有像我预期的那样被填写)
- 使用后置条件和不变量没有区别
我试过调高警告和冗长,但这根本没有帮助我做错了什么?
(也在代码合同论坛中作为问题提出。我将自己在这里添加任何相关答案。)