这是Code Contracts重写器中的错误吗?

时间:2010-08-23 01:50:24

标签: c# .net .net-4.0 code-contracts

我正在尝试.NET代码合同。当运行时合同检查被关闭时,以下代码运行正常,但在 on 上启用运行时合同检查时失败:

using System.Collections.Generic;
using System.Diagnostics.Contracts;

namespace ConsoleApplication1
{
    public class Item<T> where T : class { }
    public class FooItem : Item<FooItem> { }

    [ContractClass(typeof(ITaskContract<>))]
    public interface ITask<T> where T : Item<T>
    {
        void Execute(IEnumerable<T> items);
    }

    [ContractClassFor(typeof(ITask<>))]
    internal abstract class ITaskContract<T> : ITask<T> where T : Item<T>
    {
        void ITask<T>.Execute(IEnumerable<T> items)
        {
            Contract.Requires(items != null);
            Contract.Requires(Contract.ForAll(items, x => x != null));
        }
    }

    public class FooTask : ITask<FooItem>
    {
        public void Execute(IEnumerable<FooItem> items) { }
    }

    class Program
    {
        static void Main(string[] args)
        {
            new FooTask();
        }
    }
}

运行此代码时出现的错误不是合同违规。相反,看起来重写器以某种方式生成损坏的二进制文件:

  

未处理的异常:System.BadImageFormatException:尝试加载格式不正确的程序。 (HRESULT异常:0x8007000B)      在ConsoleApplication1.Program.Main(String [] args)

如果删除以下行,则错误消失:

Contract.Requires(Contract.ForAll(items, x => x != null));

我做错了什么,或者这是二进制重写器中的错误?我该怎么办呢?

1 个答案:

答案 0 :(得分:1)