相关疑难解决方法(0)

为什么ccrewrite.exe没有从命令行做任何事情?

我从Visual Studio 2010中获得了Code Contracts,但我无法ccrewrite.exe从命令行做任何有用的事情.这是一个示例应用程序:

using System.Diagnostics.Contracts;

public class Dummy
{
    public static void Main(string[] args)
    {
        Contract.Requires(args.Length > 0);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我编译代码并在其上运行ccrewrite.exe:

> csc /debug+ /D:CONTRACTS_FULL Dummy.cs

> ccrewrite /o:RewrittenDummy.exe Dummy.exe
elapsed time: 61ms
Run Code Online (Sandbox Code Playgroud)

RewrittenDummy.exe之后没有文件.

我已经尝试了很多选项,但没有任何区别.我注意到的一些事情:

  • 它肯定是加载Dummy.exe,因为如果我指定一个不存在的文件,它就会死掉
  • Dummy.exe肯定包含对Contract的引用 - 如果我在没有参数的情况下运行它,它会正确地失败(但是如果它已被重写,则错误消息没有被填写)
  • 使用后置条件和不变量没有区别

我已经尝试过警告和冗长,这根本没有帮助我做错了什么?

(也是代码合同论坛中的一个问题.我会在这里添加任何相关的答案.)

.net-4.0 code-contracts ccrewrite

27
推荐指数
1
解决办法
5585
查看次数

建立代码合同?

我有以下方法:

private void DoSomething(CoolClass coolClass)
{
    if (coolClass == null)
    {
        throw new ArgumentNullException("coolClass");
    }
    coolClass.Name = "Pepe";
}
Run Code Online (Sandbox Code Playgroud)

使用代码契约,我们可以这样写:

private void DoSomething(CoolClass coolClass)
{
    Contract.Requires<ArgumentNullException>(coolClass != null, "IS NULLL!");
    coolClass.Name = "Pepe";
}
Run Code Online (Sandbox Code Playgroud)

第二种方法更短更简单.我遇到的问题是,当你构建它时,在运行时它不会抛出异常,它显示了这个:

说明:必须使用代码契约二进制重写器(CCRewrite)重写程序集(可能是"CodeContractsTest"),因为它正在调用Contract.Requires并且定义了CONTRACTS_FULL符号.从项目中删除CONTRACTS_FULL符号的任何显式定义并重建.CCRewrite可以从http://go.microsoft.com/fwlink/?LinkID=169180下载.安装重写器后,可以从"代码约定"窗格上项目的"属性"页面在Visual Studio中启用它.确保启用"执行运行时合同检查",这将定义CONTRACTS_FULL.

除非使用VS,否则请从此处下载.net的CodeContracts .

然后检查项目中的"运行时检查",以便在运行时构建它时,抛出异常.

我们的应用程序是使用Jenkins和PowerShell脚本构建的.有没有办法检查运行时并抛出异常,使用简单的命令或属性,或者简单的东西?

c# code-contracts

15
推荐指数
2
解决办法
1万
查看次数

标签 统计

code-contracts ×2

.net-4.0 ×1

c# ×1

ccrewrite ×1