Это ошибка в переписывающем кодексе?

Я экспериментирую с.NET Code Contracts. Следующий код прекрасно работает, когда проверка контракта во время выполнения выключена, но не работает, если включена проверка контракта во время выполнения:

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 ответ

Решение

Это подтвержденная ошибка в рерайтере:

http://social.msdn.microsoft.com/Forums/en-US/codecontracts/thread/66410714-4475-45fb-b0db-50036463029e

Другие вопросы по тегам