Sto utilizzando un file xml come risorsa incorporata per caricare un XDocument. Stiamo utilizzando il seguente codice per ottenere il file appropriato dall'Assemblea:Perché Assembly.GetExecutingAssembly() restituisce null?
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
}
Così, quando il codice viene distribuito, di tanto in tanto ci sarà andare alla pagina e nulla sarà caricata dal documento incorporato. Quando controlliamo il registro eventi, non ci sono errori. Se l'utente aggiorna semplicemente la pagina, verrà caricata correttamente. Questo mi ha indotto a pensare che, per qualche ragione, assembly = Assembly.GetExecutingAssembly();
restituisca occasionalmente null, e il modo in cui il codice è scritto non sia un errore. Quindi, la mia domanda è: perché Assembly.GetExecutingAssembly();
restituisce nulla? Ho trovato un paio di articoli che parlano di errori a volte con codice non gestito, ma questa applicazione è scritta in C# e distribuita tramite il progetto di installazione.
Il codice è stato originariamente scritto senza codice di errore. È stato aggiunto per impedire agli utenti di ottenere schermate di errore. Le eccezioni vengono scritte nel registro eventi del server.
Una domanda molto stupida (come non posso di imaging GetExecutingAssembly fallendo nel codice gestito puro): fanno errori accadere (in qualsiasi altro pezzo di codice) che causano una voce da scrivere nel registro eventi? Sto chiedendo solo di essere sicuro che il codice di scrittura del registro eventi sia corretto e che si possano escludere eccezioni – Timores
Spiacente, dovrei averlo specificato un po 'di più. progetto di utilità per scrivere l'eccezione nel log degli eventi.Il codice per farlo è utilizzato in tutta l'applicazione e funziona.Inoltre, il codice precedente è in un metodo che viene chiamato durante l'intializzazione della pagina – Nathan
Quindi, dopo aver visto che tutti sembrano d'accordo che GetExecutingAssemb ly() non restituisce null, sono tornato indietro e ho esaminato il resto del metodo. Dopo alcune ricerche ho trovato questo articolo su MSDN: http://msdn.microsoft.com/en-us/library/xc4235zt(VS.85).aspx. In esso è detto GetManifestResourceStream() può restituire null se la risorsa non viene trovata o è inaccessibile. Restituire null al costrutto using() non causerebbe un'eccezione. Quindi lo distribuiremo per vedere se è il colpevole. – Nathan