Это ошибка в переписывающем кодексе?
Я экспериментирую с.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 ответ
Это подтвержденная ошибка в рерайтере: