Pergunta

Eu tenho contratos de código funcionando bem de dentro do Visual Studio 2010, mas eu não posso começar ccrewrite.exe para fazer qualquer coisa útil a partir da linha de comando. Aqui está um aplicativo de exemplo:

using System.Diagnostics.Contracts;

public class Dummy
{
    public static void Main(string[] args)
    {
        Contract.Requires(args.Length > 0);
    }
}

Em seguida, compilar o código e ccrewrite.exe rodar nele:

> csc /debug+ /D:CONTRACTS_FULL Dummy.cs

> ccrewrite /o:RewrittenDummy.exe Dummy.exe
elapsed time: 61ms

Não há nenhum arquivo RewrittenDummy.exe depois.

Eu tentei um monte de opções, mas nada de fazer qualquer diferença. Algumas coisas que eu notei:

  • É definitivamente o carregamento Dummy.exe, porque se eu especificar um arquivo inexistente, ele morre
  • Dummy.exe definitivamente contém referências ao contrato - se eu executá-lo sem argumentos, ele falha adequadamente (mas a mensagem de erro não foi preenchido como eu esperaria se tivesse sido reescrito)
  • Usando pós-condições e invariantes não faz diferença

Eu tentei transformar as advertências e verbosidade, e isso não ajuda em nada O que estou fazendo de errado?

(Também perguntou como pergunta no Código dos Contratos fórum . vou acrescentar quaisquer respostas relevantes aqui eu mesmo.)

Foi útil?

Solução

A aprovação, esta tem sido respondeu no fórum MSDN . Pela primeira vez, foi realmente não me sendo totalmente estúpido -. É algo que poderia realmente fazer com um aviso

Leia o post no fórum para detalhes completos, mas o problema básico é que ccrewrite não conseguia encontrar as classes de contrato: ele estava olhando na versão NET 3.5 CLR de mscorlib vez do .NET 4.0 um

.

Isso pode ser corrigido por listar explicitamente o caminho para o conjunto relevante:

> ccrewrite /o:rewrittendummy.exe dummy.exe 
  /libpaths:%SystemRoot%\Microsoft.Net\Framework\v4.0.20506
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top