【问题标题】:Type.GetType() once return type, once return nullType.GetType() 一次返回类型,一次返回null
【发布时间】: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。

标签: c# .net .net-core


【解决方案1】:

这可能是由于使用了不兼容的 C# 库而发生的。我的意思是,如果您将桌面应用程序库用于您的 Web API 项目,那么它可能会发生,因为有时 Web 版本无法识别桌面 dll。

【讨论】:

  • 在这种情况下它不会一直工作。但它确实适用于与使用 dll 的程序集版本相同的存储值。问题是当我增加 dll 版本时(代码中不能有任何变化)。
猜你喜欢
  • 1970-01-01
  • 2019-05-01
  • 2019-11-09
  • 2012-02-01
  • 2011-11-18
  • 2011-11-09
  • 1970-01-01
相关资源
最近更新 更多