Является ли это ошибкой в ​​сценаристе Code Contracts?

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

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();
 }
 }
}
</fooitem></fooitem></t></t></t></t></t></t></t></t></fooitem></t>

Ошибка при запуске этого кода не является нарушением контракта. Скорее, похоже, что перезаписывающее устройство каким-то образом генерирует поврежденный двоичный файл:

Необработанное исключение: 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

licensed under cc by-sa 3.0 with attribution.