2010-05-21 4 views
15

Nach dem Lesen über die statische Klasse System.Diagnostics.Contracts.Contract, die durch die Großartigkeit der SpeC# beeinflusst wurde, war ich begeistert und fing sofort an, meinen Code mit Aufrufen zu Contract.Requires() und Contract.Ensures() zu peppen.Also tun C# 4.0 Code-Verträge tatsächlich etwas?

Ich denke, es ist nur, weil mein Code so super-genial und fehlerfrei ist, dass die Überprüfung, dass diese Anrufe tatsächlich etwas getan haben, nur nicht bis vor kurzem kam. Ein Bug rutschte durch und ich stellte fest, dass diese Anrufe nichts bewirken! Ich hätte gedacht, dass sie zumindest eine Ausnahme werfen, wenn die Bedingung verletzt wird, aber kein solches Glück.

Fehle ich etwas? Weiß jemand, was zum Teufel ist der Punkt?

Antwort

17

Von the Contract Class page at MSDN:

Sie müssen eine binäre rewriter zu Einsatz Laufzeit Durchsetzung von Verträge verwenden. Andernfalls können Verträge wie als Contract.Ensures-Methode nur statisch getestet werden und werden nicht Ausnahmen während der Laufzeit auslösen, wenn ein Vertrag verletzt wird. Sie können den Binärrewriter CCRewrite von Code Contracts auf der Site MSDN DevLabs Web downloaden. CCRewrite wird mit einem Visual Studio-Add-In geliefert, mit dem Sie aktivieren können Laufzeit Contract Enforcement von der Projektseite Eigenschaften. Der binäre Rewriter und das Visual Studio Add-In werden nicht mit Visual Studio 2010 oder dem Windows SDK ausgeliefert.

0

Wenn Sie wollen, dass die .Requires Aufruf einen Fehler Sie eine Option im Projekteinstellungen oder .Requires<T> Anruf

+2

Was meinst du? Welche Option? Ich verwende .Requrires() –

+0

Unter Projekteigenschaften, auf die Registerkarte "Code Contracts". – porges

2

auf Antwort JSBangs Erweiterung verwenden, setzen müssen werfen:

Sie müssen die „Perform überprüfen Runtime Vertrag prüfen "hier boxen:

enter image description here

(ich habe auch die" Static Checking> Peform Stati c Vertragsprüfung "box)

+1

Beachten Sie auch, dass der [Code Visual Studio-Erweiterungen] (http://visualstudiogallery.msdn.microsoft.com/02de7066-b6ca-42b3-8b3c-2562c7fa024f), die versuchen wird, Ihre Verträge analysieren und informieren Sie über Probleme vor Ihnen sogar bauen. –