Warum sollte die Montage.GetExecutingAssembly() null zurück?

Ich bin mit einer xml-Datei als eingebettete Ressource laden ein XDocument. Wir verwenden den folgenden code, um die entsprechende Datei von der Baugruppe:

XDocument xd = new XDocument();
Assembly assembly = null;

try
{
    assembly = Assembly.GetExecutingAssembly();
}
catch(Exception ex)
{
    //Write exception to server event log
}

try
{
    if(assembly != null)
    {
        using(StreamReader sr = new 
            StreamReader(assembly.GetManifestResourceStream("assemblyPath")))
        {
            using(XmlTextReader xtr = new XmlTextReader(sr))
            {
                xd = XDocument.Load(xtr);
            }
        }
    }
}
catch(Exception ex)
{
    //Write exception to server event log
}

So, wenn der code bereitgestellt wird, werden wir gelegentlich auf die Seite zu gehen und es wird nichts geladen aus dem eingebetteten Dokument. Wenn wir überprüfen Sie das Ereignisprotokoll gibt es keine Fehler. Wenn der Benutzer gerade die Seite aktualisiert, es werden Last in Ordnung. Dies führt mich zu glauben, dass aus irgendeinem Grund, assembly = Assembly.GetExecutingAssembly(); ist vereinzelt null zurückgeben, und die Art, wie der code geschrieben ist, das ist nicht ein Fehler. So, meine Frage ist, warum sollte Assembly.GetExecutingAssembly(); werden null zurückgeben? Ich fand ein paar Artikel spricht über die Fehler manchmal mit nicht verwaltetem code, aber diese Anwendung ist in C# geschrieben und bereitgestellt über das setup-Projekt.

Den code ursprünglich geschrieben wurde, ohne Fehler-Vermeidung-code. Es wurde Hinzugefügt, um den Benutzer immer Fehler-Bildschirme. Die Ausnahmen werden in das Ereignisprotokoll des Servers.

  • Eine ganz dumme Frage (ich kann nicht imaging GetExecutingAssembly Versagen in der reinen managed code): tun, Fehler passieren in jedem anderen Stück code), die zu einem Eintrag in das Ereignisprotokoll geschrieben ? Ich Frage nur um sicher zu sein, dass das Ereignisprotokoll schreiben von code korrekt ist und dass Ausnahmen ausgeschlossen werden kann.
  • Sorry, sollte angegeben haben, die es ein bisschen mehr. Die Fänge sind den Aufruf einer Methode in einer utility-Projekt zu schreiben, die Ausnahme von der event-log. Der code, dies zu tun ist in der gesamten Anwendung verwendet, und funktioniert. Auch der obige code ist eine Methode, die aufgerufen wird, während die Seite Initialisierung.
  • So, nachdem ich, dass jeder scheint zu vereinbaren, dass GetExecutingAssembly() nicht null zurückgeben, ich ging zurück und schaute auf den rest der Methode. Nach einigem suchen fand ich diesen Artikel auf der MSDN-Website: msdn.microsoft.com/en-us/library/xc4235zt(VS.85).aspx. In es ist, sagt GetManifestResourceStream() kann null zurückgeben, wenn die Ressource nicht gefunden werden oder unzugänglich sind. Null zurückgeben, um der using () - Konstrukt nicht dazu führen würde, eine Ausnahme. Also gehen wir zur Bereitstellung dieser und sehen, ob es der Schuldige ist.
  • Ich hoffe, dass durch die "deploy" - du meinst "die Bereitstellung einer test-version auf einem test-Rechner mit einem test-server", und dass Sie nicht in der Tat die Produktion schiebt für die "smoke-tests", wie der Letzte Kommentar scheint zu implizieren. Nächste mal, wenn Ihr Benutzer beginnen immer Ausnahmen, ich empfehle beheben des Fehlers, der verursacht, anstatt nur die Unterdrückung der Benachrichtigung.
  • Durch den "deploy" - ich meine, es wird gehen, über ein anderes QS-Zyklus. So weit das Problem wurde bisher nur gesehen in der Produktion code, obwohl, so dass ich bezweifle, dass wird sich jetzt ändern. Wie bei der Behebung der Fehler, dass ist es, was ich versuche zu tun, jetzt.
  • "es wurde Hinzugefügt, um zu verhindern, dass Benutzer immer Fehler-screens" - was meinst du? Sie können nicht ändern die app/web.config so dass die Nutzer nicht sehen, Fehler wie diesen hier? War es überhaupt eine Auflösung?

InformationsquelleAutor Nathan | 2010-03-04
Schreibe einen Kommentar