Ich bin ziemlich lange in c #, aber ich habe nie einen solchen Fehler bekommen. Zuallererst, siehst du irgendetwas falsches (möglicherweise falsch) über diesen einzelnen Codeblock (außer es ist natürlich Logik, ich weiß, dass es immer 0 zurückgibt)?
%Vor%Projekteinstellungen freigeben: DEBUG constant = false; TRACE konstant = wahr; Optimiere Code = wahr; Ausgabe / Erweitert / Debug-Info = keine;
IIS = Version 7.5
Diese Methode hat nach Angabe der Freigabeeinstellungen " System.AccessViolationException : Es wurde versucht, geschützten Speicher zu lesen oder zu schreiben. Dies ist häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist."
Und hier ist der lustige Teil. Dies sind Fälle, in denen diese Ausnahme nicht ausgelöst wird:
Zu beachten:
Ich weiß, wie ich das beheben kann. Aber ich mag es nicht, Probleme zu schließen, ohne die Ursache zu kennen. Auch das möchte ich in Zukunft vermeiden. Denkst du, du könntest mir dabei helfen? Wenn es eine Null-Referenz-Ausnahme gibt, warum passiert das? Und warum ist es debug / release-spezifisch oder IIS-versionsspezifisch?
* Anmerkung2 :
Kürzlich hatte ich Probleme mit fehlenden DLLs (System.Net.Http.Formatting.dll, System.Web.Http.dll, System.Web.Http.WebHost.dll) während der Veröffentlichung. Es war wegen einiger Microsoft Sicherheitsupdates. Vielleicht ist das etwas ähnlich. *
Bearbeiten 1 Struktur der Enum-Deklaration hinzufügen.
%Vor%Ich habe auch versucht, [MethodImpl (MethodImplOptions.NoInlining)] hinzuzufügen, aber keine Hilfe.
Es ist untypisch, dass diese Arten von Zugriffsverletzungsfehlern aus verwaltetem Code stammen. Sie stammen aus einer Speicherbeschädigung, die auf fehlerhafte Hardware hinweisen kann - in extrem seltenen Fällen weist dies auf einen Fehler in der CLR hin.
Die wahrscheinlichste Ursache für diesen Fehlertyp stammt aus anderen Quellen, z. Wenn dieser Code irgendwie systemeigenen Code verwendet - entweder durch Aufruf von systemeigenem Code in einem unsicheren Kontext oder durch Aufruf von systemeigenem Code.
Um MSDN AccessViolationException zu zitieren:
In Programmen, die ausschließlich aus verifizierbarem verwaltetem Code bestehen, sind alle Referenzen entweder gültig oder null und Zugriffsverletzungen sind unmöglich. Eine AccessViolationException tritt nur auf, wenn überprüfbarer verwalteter Code mit nicht verwaltetem Code oder unsicherem verwaltetem Code interagiert.
In jedem Fall müssen Sie normalerweise an einer anderen Stelle im Code suchen, um den fehlerhaften Code zu finden, der den Speicher beschädigt. Leider ist das ein ziemlich schwer zu lösendes Problem. Viel Glück!
Ich bin mir nicht sicher, ob das für Sie noch relevant ist, aber ich habe diesen AccessViolation-Fehler erzeugt, indem ich einfach einen sehr kleinen und unbedeutenden Bool in einem vollständig verwalteten Codeabschnitt geändert habe. Der beste Teil jedoch, wenn ich Code-Optimierung im Compiler für dieses Teilprojekt deaktivieren, läuft alles gut. Es scheint ein Fehler zu sein, der vom Compiler in einer sehr spezifischen Situation eingeführt wird, die keinen logischen Sinn ergeben muss.
Tags und Links .net c# asp.net iis access-violation