代码合同:ccrewrite以代码-1退出?

时间:2011-04-10 07:48:51

标签: c# code-contracts

我是代码合约的新手。我下载了最新版本的代码合同项目(1.4.40314.1)并开始在我的项目中实现它。当我通过VS2010中的代码合同选项卡启用“Runtume Checking”时,我收到了此错误

Error 1 The command ""C:\Program Files (x86)\Microsoft\Contracts\Bin\ccrewrite" "@Application1ccrewrite.rsp"" exited with code -1.

每次我建立项目。 Plz帮助。


现在这对我来说是个主要问题。 使用代码契约的每个项目在VS2010错误窗口中显示相同的错误,在输出窗口中找不到'Application1ccrewrite.rsp',但它就在那里。


我尝试了一切。我安装了两个版本(Pro,Std),但问题仍然存在。 Plz帮忙!


Screenshot

5 个答案:

答案 0 :(得分:2)

我也有这个问题。在我的情况下,问题是ccrewrite不能用于网络文件夹中的文件,但需要项目在本地硬盘上。

答案 1 :(得分:1)

我有这个问题。导致该问题的类库的程序集名称和默认名称空间与目标文件夹中的现有DLL具有相同的名称。我一直在重构我的代码,虽然CS文件中的命名空间都被更改为namespace2,但属性文件中的默认命名空间仍然是namespace1 当我纠正这个文件都成功构建...

答案 2 :(得分:1)

有时,当解决方案路径太长时,您可以获得此信息,特别是对于许多项目。

尝试移动到c:\ temp并构建它,它可能会修复它(当然,如果你在目前的文件夹中需要它,这可能不是一个解决方案。)

我在之前的CC版本中注意到这个错误,现在可以修复。

答案 3 :(得分:0)

我不知道你是否和我有同样的问题,但我也看到了这个错误。在我的例子中,我有一个带有switch语句的方法,并且根据所采用的分支,应用了不同的要求:

static ITransaction CreateTransaction(
    String transType,
    MyType1 parm1,
    /* Other params unimportant to this example */
    String parm5)
{
    switch (transType) {
        case Transaction.Type.SOME_TRANSFER:
            Contract.Requires<ArgumentNullException>(parm1.Account != null, "Account cannot be null.");
            Contract.Requires<ArgumentException>(!String.IsNullOrWhiteSpace(parm5), "parm5 cannot be null or empty.");

            // Create instance

            return someInst;

        case Transaction.Type.SOME_OTHER_TRANSFER:
            Contract.Requires<ArgumentException>(!String.IsNullOrWhiteSpace(parm1.Type), "Type cannot be null or empty.");
            Contract.Requires<ArgumentException>(!String.IsNullOrWhiteSpace(parm1.Number), "Number cannot be null or empty.");

            // Create instance

            return someInst;

        /* Other cases */

        default:
            throw new ApplicationException("Invalid or unknown transaction type provided.");
    }
}

当我尝试构建时,这给了我在错误列表中记下的错误。在输出窗口中,我得到了这个:

  

EXEC:参考装配生成器   警告:出了点问题   方法中的合同号1   'TerraCognita.LoanExpress.Domain.Loan.CreateLoanTransaction'   AsmMeta因未被捕获而失败   例外:操作无效   到目标的当前状态。

我将每个分支推入自己的方法,使Contract.Requires每个方法中的第一行代码,我不再有编译问题。似乎Contract.Requires必须是方法中的第一行代码 - 这是有道理的,因为它们旨在用于定义前置条件。

希望这有帮助。

答案 4 :(得分:0)

解决方案是将pre和pos条件放在第一行。 ccrewrite不接受pre和post条件低于命令行。