2010-05-21 8 views
15

Po przeczytaniu klasy statycznej System.Diagnostics.Contracts.Contract, na którą wpływ miała wspaniałość SpeC#, byłem zachwycony i natychmiast zacząłem pieprzyć mój kod wywołując Contract.Requires() i Contract.Ensures().Czy kontrakty C# 4.0 faktycznie robią cokolwiek?

Domyślam się, że mój kod jest tak niesamowity i wolny od błędów, że sprawdzenie, czy te połączenia rzeczywiście coś zrobiły, nie pojawiło się do niedawna. Błąd prześlizgnął się i doszedłem do wniosku, że te połączenia nic nie robią! Pomyślałbym, że przynajmniej rzucają wyjątek, gdy warunek zostanie naruszony, ale nie ma takiego szczęścia.

Czy brakuje mi czegoś? Czy ktoś wie, o co tu chodzi?

Odpowiedz

17

Od the Contract Class page at MSDN:

Musisz użyć binarny rewriter do wkładki egzekwowania run-time z umów. W przeciwnym razie kontrakty takie jak jako metoda Contract.Ensures mogą być testowane statycznie i nie będą zgłaszać wyjątków w czasie wykonywania, jeśli naruszona zostanie umowa . Możesz pobrać program do zapisu binarnego CCRewrite z Umów dotyczących kodu na stronie MSDN DevLabs Web . Program CCRewrite jest dostarczany z dodatkiem Visual Studio, który umożliwia aktywację egzekucji zleceń w czasie wykonywania ze strony Właściwości projektu. Aktualizator binarny i dodatek Visual Studio nie są dostarczane z pakietem Visual Studio 2010 lub z pakietem Windows SDK.

0

Jeśli chcesz wywołanie .Requires wyrzucić błąd trzeba ustawić odpowiednią opcję w ustawieniach projektu lub użyj .Requires<T> rozmowę

+2

Co masz na myśli? Jaką opcję? Używam .Requrires() –

+0

W obszarze właściwości projektu przejdź do zakładki "Kontrakty kodowe". – porges

2

Rozwijając na odpowiedź JSBangs':

należy sprawdzić „Wykonaj Runtime umowa Sprawdzanie "box tutaj:

enter image description here

(ja również sprawdziłem" Static Sprawdzanie> peform sTATI c Kontrakt umowy ")

+1

Należy również zauważyć, że [kod zawiera rozszerzenia Visual Studio] (http://visualstudiogallery.msdn.microsoft.com/02de7066-b6ca-42b3-8b3c-2562c7fa024f), który spróbuje przeanalizować twoje umowy i poinformuje Cię o problemach przed tobą. nawet budować. –

Powiązane problemy