.net-4.0 - ejemplos - ejecutar php desde cmd windows
¿Por qué ccrewrite.exe no hace nada desde la línea de comandos? (1)
Tengo Contratos de Código funcionando bien desde dentro de Visual Studio 2010, pero no puedo hacer que ccrewrite.exe
haga algo útil desde la línea de comandos. Aquí hay una aplicación de muestra:
using System.Diagnostics.Contracts;
public class Dummy
{
public static void Main(string[] args)
{
Contract.Requires(args.Length > 0);
}
}
Luego compilo el código y ejecuto ccrewrite.exe en él:
> csc /debug+ /D:CONTRACTS_FULL Dummy.cs
> ccrewrite /o:RewrittenDummy.exe Dummy.exe
elapsed time: 61ms
No hay ningún archivo RewrittenDummy.exe
después.
He intentado un montón de opciones, pero nada está haciendo la diferencia. Algunas cosas que he notado:
- Definitivamente está cargando Dummy.exe, porque si especifico un archivo inexistente, muere
- Dummy.exe definitivamente contiene referencias al Contrato: si lo ejecuto sin argumentos, falla apropiadamente (pero el mensaje de error no se ha completado como lo esperaría si se hubiera reescrito)
- Usar postcondiciones e invariantes no hace ninguna diferencia.
He intentado activar las advertencias y la verbosidad, y eso no ayuda en absoluto. ¿Qué estoy haciendo mal?
(También formulada como una pregunta en el foro de Contratos de Código . Agregaré las respuestas relevantes aquí mismo).
Está bien, esto ha sido respondido en el foro de MSDN . 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 obtener todos los detalles, pero el problema básico es que ccrewrite
no pudo encontrar las clases del contrato: buscaba en la versión .NET 3.5 CLR de mscorlib
lugar de la versión .NET 4.0.
Esto puede solucionarse enumerando explícitamente la ruta al conjunto relevante:
> ccrewrite /o:rewrittendummy.exe dummy.exe
/libpaths:%SystemRoot%/Microsoft.Net/Framework/v4.0.20506