【问题标题】:will .NET 4.5.2 code throw exception on <4.5.2 machine?.NET 4.5.2 代码会在 <4.5.2 机器上抛出异常吗?
【发布时间】:2014-07-04 14:49:30
【问题描述】:

我想在我们向许多客户提供的 asp.net 4.5 Web 应用程序产品中使用 QueueBackgroundWorkItem 功能。

但是很可能大多数客户没有安装 4.5.2。在这种情况下,我可以提供替代解决方案或显示安装 4.5.2 的消息。

是否可以以这种方式包含 4.5.2 代码,或者如果 4.5.2 不存在,它可能会在启动时引发异常?

【问题讨论】:

  • 试试会不会更快?您肯定应该在部署给客户之前进行此类测试。我相信 - 会有关于所需 .NET 版本的 Windows 对话框。
  • 但是很可能大多数客户没有安装 4.5.2。 这与没有安装 .NET 4.5 的客户有什么不同?如果要运行应用程序,请安装依赖项。
  • 99.9% 的应用程序只需要 4.5 或更少 这是一个大型产品,我们希望为拥有或想要安装 4.5.2 的客户提供一项功能。但是您不能仅仅因为您希望他们安装一个新的服务包,即使它是有意义的,您也不能假设客户会安装一个新的服务包。以ie8为例
  • 如果客户想使用我的应用程序,那么他们可以安装依赖项。新的依赖来了?提前沟通。
  • 很遗憾,现实在我的行业中并不现实。

标签: c# asp.net .net .net-4.5.2


【解决方案1】:

当它尝试编译包含使用MissingMethodException 调用QueueBackgroundWorkItem 的方法时会抛出异常。

如果您避免任何可能强制它编译此类方法的代码路径,那么您应该没问题,并且可以优雅地警告用户(例如在使用反射检查此方法是否存在之后)或切换到备用方法。

它不会在启动时自动抛出异常,除非你的启动代码包含这样的调用。

【讨论】:

  • 所以我可以发布一个以 4.5 为目标的版本,其中包含 4.5.2 代码,检测框架版本,但将 4.5.2 代码提取到一个代码路径中,除非检测到该代码路径才会运行成功了吗?
【解决方案2】:

.Net 将在启动时检查当前安装的 .NET 版本。如果它不需要它会显示对话框窗口,显示原因并允许下载最新版本

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多