Code in einer CER ruft eine Funktion auf, die kein ReliabilityContractAttribute oder ein schwaches, für die Ausführung in einem CER ungeeignetes ReliabilityContractAttribute besitzt.
In der syntaktischen Konstruktion eines schwachen Vertrags wird kein Consistency-Enumerationswert oder ein Consistency-Wert von MayCorruptProcess, MayCorruptAppDomain oder None angegeben. Diese Bedingungen bedeuten, dass der aufgerufene Code möglicherweise dem Ziel des weiteren Codes in der CER widerspricht, einen konsistenten Zustand beizubehalten. Code in CERs kann Fehler streng deterministisch behandeln. Dabei werden intern unveränderliche Werte beibehalten, die wichtig für die Anwendung sind, und es wird ermöglicht, dass die Anwendung bei vorübergehenden Fehlern wie Ausnahmen wegen ungenügendem Speicherplatz weiterhin ausgeführt wird.
Wenn dieser MDA aktiviert wird, bedeutet dies möglicherweise, dass die in der CER aufgerufene Methode auf eine Art fehlschlagen kann, die vom Aufrufer nicht erwartet wurde oder die AppDomain bzw. den Prozesszustand beschädigt oder nicht mehr wiederherstellbar hinterlässt. Natürlich ist es auch möglich, dass der aufgerufene Code ordnungsgemäß ausgeführt wird und das Problem einfach ein fehlender Vertrag ist. Beim Verfassen von zuverlässigem Code spielen jedoch subtile Faktoren eine Rolle; das Fehlen eines Vertrags ist ein gutes Anzeichen, dass der Code nicht korrekt ausgeführt wird. Die Verträge sind Hinweise, dass der Programmierer zuverlässigen Code produziert hat und außerdem zusichert, dass diese Vereinbarungen in künftigen Versionen des Codes nicht geändert werden. Das heißt, die Verträge sind Absichtserklärungen und nicht nur Implementierungsdetails.
Da jede Methode mit einem schwachen oder gar keinem Vertrag potenziell auf viele unvorhersagbare Arten fehlschlagen kann, versucht die Laufzeit nicht, ihre eigenen unvorhersagbaren Fehlermöglichkeiten, die z. B. auf die träge JIT-Kompilierung, das Füllen des Wörterbuchs mit Generika und Threadabbrüche zurückzuführen sind, von der Methode zu entfernen. Wenn dieser MDA also aktiviert wird, bedeutet dies, dass die Laufzeit die aufgerufene Methode nicht in den definierten CER aufnimmt. Das Aufrufdiagramm wurde an diesem Knoten beendet, weil eine weitere Vorbereitung dieser Teilstruktur dazu beitragen würde, den potenziellen Fehler zu maskieren.