Ich habe versucht, die Regeln der Code-Analyse für diese Methode zu befolgen:
%Vor% hat alle Try {} Finaly{}
Blöcke hinzugefügt, aber es schrie mich immer noch an, dass ich Regel 2202 nicht respektiere.
kann mir jemand dabei helfen?
Ja, ich habe andere Beiträge zu diesem Thema gelesen und habe versucht, sie anzuwenden, aber am Ende bekomme ich immer noch die gleiche Nachricht.
Um die CA2202-Warnung für cs
zu entfernen, entfernen Sie einfach den Aufruf der Methode Close
.
Das CA2202-Problem für ms
ist ein bisschen komplexer. Die Warnung taucht auf, weil CryptoStream
die Unverschämtheit hat, den Stream, den sie über ihren Konstruktor erhalten hat, zu disponieren, was bedeutet, dass es einen unangemessenen Aufruf von ms.Close()
gibt, den Sie nicht vermeiden können. Die gute Nachricht ist, dass diese vorzeitige Disposition in Ihrem Fall keine Nebenwirkungen hat, und dasselbe gilt für die doppelte Disposition, so dass Sie sicher auf ein SuppressMessageAttribute
schlagen und das Problem ignorieren können. (In Fällen, in denen Sie den Stream tatsächlich passieren müssen, um seine unausweichliche Disposition durch etwas wie CryptoStream
zu überstehen, besteht die übliche Technik darin, eine Stream-Subklasse zu verwenden, deren Anordnung durch ihren Instanziierungscode verhindert werden kann.)
Folgen Sie der Dokumentation zu diesem Thema , um zu diesem Code zu gelangen:
%Vor%Die Dokumentation zu dieser Analysewarnung ( Ссылка ) gibt Ihnen ein Beispiel, das Ihrem Beispiel ähnelt dass es Streams manipuliert:
%Vor%aber das gibt immer noch den Fehler. Folgendes wird den Fehler beheben:
%Vor%Der Grund ist einfach; wenn der Autor den Stream immer für dich entsorgt. Nur im Szenario wird der Writer nicht erfolgreich erstellt, wenn Sie den Stream selbst entsorgen. Aber ich muss zugeben, ich mag die folgende Syntax viel mehr, und wenn Sie einen MemoryStream anstelle eines FileStream erstellen, ist die Chance auf eine Ausnahme gering und ich würde lieber die CA unterdrücken. Bitte beachten Sie, dass Sie mit Anweisungen stacken können, so dass eine zusätzliche "Verschachtelungsebene" oft nicht benötigt wird.
%Vor%Tags und Links c# code-analysis