Estoy usando un archivo xml como recurso incrustado para cargar un XDocument. Estamos utilizando el siguiente código para obtener el archivo correspondiente de la Asamblea:¿Por qué Assembly.GetExecutingAssembly() devolverá nulo?
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
}
Así que cuando se despliega el código, que de vez en cuando ir a la página y nada será cargada desde el documento incrustado. Cuando verificamos el registro de eventos, no hay ningún error. Si el usuario simplemente actualiza la página, se cargará bien. Esto me ha llevado a pensar que, por alguna razón, assembly = Assembly.GetExecutingAssembly();
ocasionalmente devuelve nulo, y la forma en que se escribe el código no es un error. Entonces, mi pregunta es ¿por qué Assembly.GetExecutingAssembly();
devolverá nulo? Encontré un par de artículos sobre errores a veces con código no administrado, pero esta aplicación está escrita en C# y se implementó a través de un proyecto de configuración.
El código se escribió originalmente sin código de anulación de error. Se agregó para evitar que los usuarios obtengan pantallas de error. Las excepciones se escriben en el registro de eventos del servidor.
Una pregunta muy estúpida (ya que no puedo obtener imágenes GetExecutingAssembly no en código administrado puro): qué ocurren errores (en cualquier otra pieza de código) que causan una entrada para escribir en el registro de eventos? Solo pido para asegurarme de que el código de escritura del registro de eventos sea correcto y que las excepciones se puedan descartar. – Timores
Lo siento, debería haberlo especificado un poco más. Las capturas están llamando a un método en una proyecto de utilidad para escribir la excepción en el registro de eventos. El código para hacerlo se utiliza en toda la aplicación y funciona. Además, el código anterior está en un método que se llama durante la inicialización de la página. – Nathan
Entonces, después de ver que todo el mundo parece acuerda que GetExecutingAssemb ly() no devolverá nulo, volví y miré el resto del método. Después de buscar, encontré este artículo en MSDN: http://msdn.microsoft.com/en-us/library/xc4235zt(VS.85).aspx. En él se dice que GetManifestResourceStream() puede devolver nulo si el recurso no se encuentra o no es accesible. Devolver null al constructo using() no causaría una excepción. Así que vamos a implementar esto y ver si es el culpable. – Nathan