Warum würde Assembly.GetExecutingAssembly () null zurückgeben?

8

Ich verwende eine XML-Datei als eingebettete Ressource, um ein XDocument zu laden. Wir verwenden den folgenden Code, um die entsprechende Datei aus der Assembly zu erhalten:

%Vor%

Wenn der Code bereitgestellt wird, werden wir gelegentlich auf die Seite gehen, und aus dem eingebetteten Dokument wird nichts geladen. Wenn wir das Ereignisprotokoll überprüfen, tritt kein Fehler auf. Wenn der Benutzer die Seite gerade aktualisiert, wird sie geladen. Das hat mich dazu gebracht zu glauben, dass assembly = Assembly.GetExecutingAssembly(); aus irgendeinem Grund gelegentlich null zurückgibt, und die Art, wie der Code geschrieben wird, ist kein Fehler. Also, meine Frage ist warum würde Assembly.GetExecutingAssembly(); Null zurückgeben? Ich habe ein paar Artikel darüber gefunden, dass es manchmal Fehler mit nicht verwaltetem Code gibt, aber diese Anwendung wird in C # geschrieben und über das Setup-Projekt bereitgestellt.

Der Code wurde ursprünglich ohne Fehlervermeidungscode geschrieben. Es wurde hinzugefügt, um zu verhindern, dass die Benutzer Fehleranzeigen erhalten. Die Ausnahmen werden in das Ereignisprotokoll des Servers geschrieben.

    
Nathan 04.03.2010, 00:25
quelle

6 Antworten

7

Dies ist ein perfektes Beispiel dafür, warum es fast immer eine schlechte Idee ist, Ausnahmen zu essen, besonders die oberste Ebene System.Exception . Das Problem könnte überall sein; wahrscheinlicher als nicht, ist das wahre Problem in Ihrem Logging-Code.

Entferne diese leeren catch Blöcke (oder wiederhole sie innerhalb von throw; ) und finde heraus, wo die Ausnahme wirklich auftritt. Und wenn Sie das eigentliche Problem gefunden haben und Ihren Code neu schreiben, schreiben Sie ihn um, um nur Ausnahmen zu erfassen, mit denen Sie eigentlich umgehen können .

GetExecutingAssembly gibt null , Punkt nicht zurück.

    
Aaronaught 04.03.2010 01:25
quelle
5

Gehen Sie zu den Eigenschaften der Datei, deren Pfad erwähnt wird, und ändern Sie die BuildAction von Inhalt, der standardmäßig zu EmbeddedResource ist. Neu kompilieren und es sollte funktionieren.

    
Sap 16.11.2011 11:05
quelle
3

Sie sind mit dem falschen Paddel am Bach, GetExecutingAssembly () gibt niemals null zurück. Beweisen Sie es selbst, indem Sie den Fehlervermeidungscode entfernen, einschließlich des Null-Checks. Das gelegentliche Scheitern ist normalerweise ein Threading-Problem.

    
Hans Passant 04.03.2010 00:34
quelle
2

Dies könnte einer der Gründe sein - Ссылка

    
codemonkey 09.03.2010 11:08
quelle
1

Wenn ich mit einer Situation wie dieser konfrontiert bin, versuche ich wirklich zu beweisen, dass der zurückgegebene Wert null war. Versuchen Sie Folgendes:

%Vor%

Ich vermute, dass es immer "falsch" schreiben wird, und etwas anderes ist eigentlich das Problem - vielleicht etwas, das Sie nicht in Ihr Code-Snippet aufgenommen haben.

    
Roman Starkov 04.03.2010 01:24
quelle
1

Dies kann null zurückgeben, wenn Sie Ihren Code von einer nicht verwalteten Anwendung (z. B. dem NUnit Test-Runner) starten: Versuchen Sie Folgendes mit der Konsole:

%Vor%

Da Sie es eingebettet haben, nehme ich an, dass Sie eine Art Bootloader oder einen Interpreter verwenden, um Ihre .Net-App auszuführen. Das wäre wahrscheinlich nicht verwaltet (d. H. Nicht .Net interpretiert) und würde daher null zurückgeben.

Siehe Dokumentation, Abschnitt "Anmerkungen: Ссылка

    
chrisb 13.03.2014 00:47
quelle