2009-07-30 7 views
27

Tengo contratos de código funcionando bien desde Visual Studio 2010, pero no puedo obtener ccrewrite.exe para hacer algo útil desde la línea de comandos. He aquí una aplicación de ejemplo:¿Por qué ccrewrite.exe no hace nada desde la línea de comandos?

using System.Diagnostics.Contracts; 

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

entonces puedo compilar el código y ejecutar ccrewrite.exe en él:

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

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

No hay archivo de RewrittenDummy.exe después.

He intentado muchas opciones, pero nada hace la diferencia. Unas pocas cosas que he notado:

  • Es, definitivamente, la carga de Dummy.exe, porque si puedo especificar un archivo inexistente, se muere
  • Dummy.exe definitivamente contiene referencias a contrato - si funciono con sin argumentos, que no forma apropiada (pero el mensaje de error no ha sido rellenado como yo esperaría si se hubiera reescrito)
  • Usando poscondiciones e invariantes no hace ninguna diferencia

he intentado convertir advertencias y verbosidad arriba, y eso no ayuda en absoluto Wh ¿Estoy haciendo algo mal?

(también pidió como question in the Code Contracts forum. Voy a añadir respuestas pertinentes aquí mismo.)

Respuesta

19

Bueno, esto ha sido answered in the MSDN forum. Por una vez, no era realmente yo siendo completamente estúpido, es algo que realmente podría hacer con una advertencia.

Lea la publicación del foro para más detalles, pero el problema básico es que ccrewrite no pudo encontrar las clases contractuales: estaba buscando en la versión .NET 3.5 CLR de mscorlib en lugar de .NET 4.0.

Esto se puede solucionar haciendo una lista de forma explícita el camino a la Asamblea relevante:

> ccrewrite /o:rewrittendummy.exe dummy.exe 
    /libpaths:%SystemRoot%\Microsoft.Net\Framework\v4.0.20506 
+1

Cuando añado esta línea? – Pedro77

+0

He comentado todas mis llamadas de contratos y volví a lo viejo y bueno! = Null ... ccrewrite tiene demasiados errores. – Pedro77

+0

@ Pedro77: Es difícil decir exactamente cuál es su problema a partir de estos comentarios. Tal vez abrir una nueva pregunta? –

Cuestiones relacionadas