У меня есть контракты кода, работающие нормально из 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 - если я запускаю его без аргументов, он соответствующим образом завершается с ошибкой (но сообщение об ошибке не было заполнено, как я ожидал, если бы оно было переписано)
- Использование постусловий и инвариантов не имеет значения
Я пытался включить предупреждения и многословие, но это совсем не помогает
Что я делаю не так?
(Также задается как вопрос на форуме Code Contracts . Я сам добавлю сюда любые соответствующие ответы.)