2010-05-21 21 views
15

Después de leer acerca de la clase estática System.Diagnostics.Contracts.Contract que ha sido influenciada por la genialidad de SpeC# I estaba muy emocionada y de inmediato comenzó a salpicar mi código con llamadas a Contract.Requires() y Contract.Ensures().¿Los contratos de código C# 4.0 realmente hacen algo?

Supongo que es solo porque mi código es tan genial y no tiene errores que la comprobación de que esas llamadas realmente hicieron algo simplemente no surgió hasta hace poco. Un error se deslizó y me di cuenta de que estas llamadas no hacen nada. Pensé que al menos arrojarían una excepción cuando se violara la condición, pero no hubo tanta suerte.

¿Echo de menos algo? ¿Alguien sabe qué diablos es el punto?

Respuesta

17

De the Contract Class page at MSDN:

debe utilizar una regrabadora de binario a inserto de la aplicación en tiempo de ejecución de contratos . De lo contrario, los contratos tales como como el método Contract.Ensures pueden solo probarse estáticamente y no arrojarán excepciones durante el tiempo de ejecución si se infringe un contrato . Puede descargar el reescritor binario CCRewrite de Contratos de código en el sitio web de MSDN DevLabs . CCRewrite viene con un complemento de Studio Visual que le permite activar la ejecución del contrato en tiempo de ejecución desde la página de propiedades del proyecto. El reescritor binario y el complemento Visual Studio no se incluyen con Visual Studio 2010 o el SDK de Windows.

0

Si desea que la llamada .Requires para lanzar un error que necesita para establecer una opción en la configuración del proyecto o utilizar .Requires<T> llamada

+2

¿Qué quiere decir? ¿Qué opción? Estoy usando .Requrires() –

+0

En las propiedades del proyecto, vaya a la pestaña "Contratos de código". – porges

2

Ampliando la respuesta JSBangs':

Debe comprobar el "realizar en tiempo de ejecución Comprobación de contrato "caja aquí:

enter image description here

(que también la inspección de la" Comprobación estática> peform Stati c Cuadro "Comprobación de contrato")

+1

También debe tenerse en cuenta que [el código contrae extensiones de Visual Studio] (http://visualstudiogallery.msdn.microsoft.com/02de7066-b6ca-42b3-8b3c-2562c7fa024f) que intentará analizar sus contratos y le informará de los problemas que tiene ante sí incluso construir. –

Cuestiones relacionadas