【发布时间】:2017-11-07 21:07:39
【问题描述】:
我知道有一些关于 Type.GetType() reutrning null 的帖子,但我的问题是,我有 .dll 模块并在用 c# 编写的桌面版本中使用它。这个模块从 xml 加载配置,反序列化它并返回我填充的对象。在桌面版本上它工作正常。
现在想将它添加到我们在 .NET Core 上运行的 API 中。所以我使用相同的 .dll 文件并使用与桌面相同的加载方法。
在 XML 中,我们还存储程序集限定名称(namespace.class、程序集、版本、文化、publickeyToken)。在桌面版本上,我们创建配置,例如在版本 1.2.3.4 中,而不是对此 .dll 进行一些更改,将版本更改为 1.2.3.5,我们仍然能够加载配置。但是如果尝试在 API 中做同样的事情,我不能这样做,只有在 XML 中的版本与当前的程序集版本相同。无法加载较低版本的配置。
我在这一行发现了问题,其中 typeArgumentName 是程序集限定名称。
Type.GetType(typeArgumentName)
如果我使用桌面应用程序调试此代码,它工作正常。如果使用 API 调试它并将 typeArgumenName 版本更改为当前的 .dll 版本,它可以工作。如果不更改,则返回null。
我的问题是,为什么它可以在桌面版本上运行并返回正确的类型,以及为什么它在与 API 一起使用时返回 null。
【问题讨论】:
-
您要访问的程序集似乎确实存在,但在您要获取其类型时尚未初始化。
-
我不这么认为。在 .dll 文件中是对象,即加载和保存配置,还有配置对象/s。所以在我的程序集中是对象配置,而不是尝试加载此配置的 configLoader。