Почему ccrewrite.exe ничего не делает из командной строки?

StackOverflow https://stackoverflow.com/questions/1209166

Вопрос

У меня есть контракты с кодом, которые отлично работают внутри 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 определенно содержит ссылки на Контракт - если я запускаю его без аргументов, он завершается с ошибкой соответствующим образом (но сообщение об ошибке не было заполнено, как я ожидал бы, если бы оно было переписано)
  • Использование постусловий и инвариантов не имеет никакого значения

Я пытался увеличить количество предупреждений и подробностей, но это совсем не помогает Что я делаю не так?

(Также заданный в качестве вопрос на форуме Code Contracts.Я сам добавлю сюда любые соответствующие ответы.)

Это было полезно?

Решение

Ладно, это было ответил на форуме MSDN.На этот раз дело было не в том, что я был совсем глуп - это то, что действительно могло бы обойтись без предупреждения.

Прочитайте сообщение на форуме для получения полной информации, но основная проблема заключается в том, что ccrewrite не удалось найти классы контрактов:он искал в .NET 3.5 CLR версию mscorlib вместо версии .NET 4.0.

Это можно исправить, явно указав путь к соответствующей сборке:

> ccrewrite /o:rewrittendummy.exe dummy.exe 
  /libpaths:%SystemRoot%\Microsoft.Net\Framework\v4.0.20506
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top