System.Reflection.Assembly 的空引用异常

发布于 2024-10-19 03:04:15 字数 206 浏览 1 评论 0原文

我开发了一个用于内部电子邮件报告的库。当我使用另一个项目中的该库时(通过添加引用)。

它在下一行给出了 NullReferenceException 。

System.Reflection.Assembly.GetEntryAssembly().GetName().Name

知道为什么 Assembly 为空吗?

I have developed a Library for internal email reporting. When I am using that Library from another project (By Adding Reference).

It gives NullReferenceException on the following line.

System.Reflection.Assembly.GetEntryAssembly().GetName().Name

Any idea, why Assembly is null?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

空气里的味道 2024-10-26 03:04:15

这是预期的,尤其是在 Windows 服务中,它们是由非托管运行时加载的。

用途:

  Process.GetCurrentProcess().MainModule.FileName

获取非托管入口点文件。


更新

看来你正在寻找这个:

  System.Reflection.Assembly.GetExecutingAssembly().GetName().Name

This is expected especially in the Windows Services where they are loaded by an unmanaged runtime.

Use:

  Process.GetCurrentProcess().MainModule.FileName

To get unmanaged entry point file.


Update

It seems you are looking for this:

  System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
2024-10-26 03:04:15

问题已经解决了,

我正在用来

Assembly.GetAssembly(ex.TargetSite.DeclaringType.UnderlyingSystemType).GetName().Name 

获取 EntryAssemblyName。
在这种情况下,我已经有一个接受异常“ex”的参数,所以我用它来解决它。

非常感谢大家,特别是@Aliostad

Cheers

problem is solved guys,

I am using

Assembly.GetAssembly(ex.TargetSite.DeclaringType.UnderlyingSystemType).GetName().Name 

to get the EntryAssemblyName.
In this case I already has parameter which is taking Exception 'ex', so I solved it by using that.

Many Thanks Guys, specially @Aliostad

Cheers

夏天碎花小短裙 2024-10-26 03:04:15

回答 OP 和 @Neeraj 的问题:有时,使用 Assembly.GetExecutingAssembly().Location 获取程序集的根也很有用(例如,当 Resharper 测试运行程序正在使您的生活变得更好时)使用 GetEntryAssembly() 时很难)

string rootDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
string someFile = Path.Combine(
            rootDir ?? throw new InvalidOperationException(),
            "Foo",
            "Bar.txt");

Answering both the OP's and @Neeraj 's questions: sometimes it can also be useful to get the root of your assembly with Assembly.GetExecutingAssembly().Location (e.g. when the Resharper test runner is making your life hard when using GetEntryAssembly())

string rootDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
string someFile = Path.Combine(
            rootDir ?? throw new InvalidOperationException(),
            "Foo",
            "Bar.txt");
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文