gpt4 book ai didi

c# - 为什么 Assembly.GetExecutingAssembly() 会返回 null?

转载 作者:太空狗 更新时间:2023-10-29 18:08:58 29 4
gpt4 key购买 nike

我正在使用 xml 文件作为嵌入资源来加载 XDocument。我们正在使用以下代码从程序集中获取适当的文件:

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
}

所以在部署代码的时候,我们偶尔会去到页面,并没有从嵌入的文档中加载任何东西。当我们检查事件日志时,没有错误。如果用户只是刷新页面,它会加载正常。这让我想到,出于某种原因,assembly = Assembly.GetExecutingAssembly(); 偶尔会返回 null,代码的编写方式并不是错误。所以,我的问题是为什么 Assembly.GetExecutingAssembly(); 会返回 null?我发现有几篇文章谈到非托管代码有时会出现错误,但此应用程序是用 C# 编写并通过安装项目部署的。

该代码最初是在没有错误避免代码的情况下编写的。添加它是为了防止用户收到错误屏幕。异常被写入服务器的事件日志。

最佳答案

这是一个完美的例子,说明为什么吞噬异常是一个几乎普遍的坏主意,尤其是顶级 System.Exception。问题可能出在任何地方;很有可能,真正的问题出在您的日志记录代码中。

取出那些空的 catch block (或用 throw; 重新抛出它们)并查看异常发生的地方真正。一旦您找到真正的问题并重写您的代码,重写它以仅捕获您实际上知道如何处理的异常。

GetExecutingAssembly 不会返回 null,句号。

关于c# - 为什么 Assembly.GetExecutingAssembly() 会返回 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2376068/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com