.NET 4.5 应用程序在具有 .NET 4.0 的系统上的特定功能兼容性

Feature-specific compatibility of a .NET 4.5 application on a system with .NET 4.0

我有一个项目 运行 在 4.0 上运行良好,但是为了利用新的 ZipFile class 我决定以 4.5 为目标。我的绝大多数用户都安装了 4.5+,但只有 4.0 的人可能会出现并尝试使用我的软件。

因为它 运行 在 4.0 上完全正常,除了 ZipFile class,我可以定位 4.5 吗,如果检测到 4.0,它只是禁用这个特定的代码路径并继续 运行 其他方面都正常?

但是我假设我不能这么容易地(完全没有?)创建向后兼容模式,因为首先必须引用 4.5 程序集才能使用 ZipFile。

附带说明一下,我已经实现了对安装的框架版本的检测。如果检测到 <4.5,我可以很容易地禁用这部分代码。

构建两个版本的 .exe(分别为 Target 4.0 和 4.5)。 安装过程中,检测.Net版本并解压.net版本匹配的.exe。

最简单的方法可能是动态加载所需的代码。

如果检测到 .NET 4.5,您可以使用反射来查找所需的程序集、class 和成员。您可以将结果缓存在委托中,以避免每次都反映出来。

您还可以使用插件系统,其中添加 zip 文件支持的插件以 .NET 4.5 为目标,但您的主应用程序仅以 .NET 4.0 为目标。然后您的主应用程序确定它是否可以加载插件。

但是我强烈反对您建议的以 .NET 4.5 为目标并简单地避免 .NET 4.0 功能的建议。如果以 .NET 4.5 为目标,您不知道将隐式使用哪些 .NET 4.5 功能。这会破坏许多 NuGet 包,当您需要 4.0 版本时,它们会错误地安装 .NET 4.5 版本。这打破了 async。这可能会破坏更多。