.net-4.0 - 为什么 ccrewrite.exe 没有从命令行执行任何操作?

标签 .net-4.0 code-contracts ccrewrite

我的代码契约(Contract)在 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 的引用 - 如果我不带参数运行它,它会适本地失败(但错误消息没有像我期望的那样填写)
  • 使用后置条件和不变量没有区别

  • 我试过把警告和冗长调高,但这根本没有帮助
    我究竟做错了什么?

    (也被问为 question in the Code Contracts forum 。我会自己在这里添加任何相关的答案。)

    最佳答案

    好的,这是answered in the MSDN forum .这一次,并不是我真的完全愚蠢 - 这是真的可以通过警告来做的事情。

    阅读论坛帖子以获取完整详细信息,但基本问题是 ccrewrite找不到契约(Contract)类:它正在查找 mscorlib 的 .NET 3.5 CLR 版本而不是 .NET 4.0 一个。

    这可以通过明确列出相关程序集的路径来解决:

    > ccrewrite /o:rewrittendummy.exe dummy.exe 
      /libpaths:%SystemRoot%\Microsoft.Net\Framework\v4.0.20506
    

    关于.net-4.0 - 为什么 ccrewrite.exe 没有从命令行执行任何操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1209166/

    相关文章:

    wpf - 使用 MVVM-Light 的消息传递问题

    c# - CodeContracts 无法证明简单的保证

    c# - 由于代码契约(Contract),ASP NET WebApp 在发布后失败

    .net - 代码契约重写失败 - libpaths 命令

    c# - 创建 WCF PUT Rest 服务

    c# - 有没有办法以编程方式从 WCF 主机推送 NamespaceMappings?

    c# - 我们可以在代码契约中对泛型类型强制为 nullability 吗?

    c# - 不使用ccrewrite,“Contract.Requires <T>”的行为如何?这与“要求”有所不同吗?

    rest - 为什么我的 WebAPI REST 方法在周末坏了?

    c# - .Net 3.5 中的 Expression.Assign 是否等效?