Por que é ccrewrite.exe não fazer nada a partir da linha de comando?
-
05-07-2019 - |
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.)
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