.NET 4.5 应用程序在具有 .NET 4.0 的系统上的特定功能兼容性
Posted
技术标签:
【中文标题】.NET 4.5 应用程序在具有 .NET 4.0 的系统上的特定功能兼容性【英文标题】:Feature-specific compatibility of a .NET 4.5 application on a system with .NET 4.0 【发布时间】:2015-06-14 20:11:16 【问题描述】:我有一个在 4.0 上运行良好的项目,但是为了利用新的 ZipFile 类,我决定以 4.5 为目标。我的绝大多数用户都安装了 4.5+,但并非不可能只有 4.0 的人可能会出现并尝试使用我的软件。
既然它在 4.0 上运行得非常好,除了 ZipFile 类,我可以定位到 4.5,如果检测到 4.0,它只会禁用这个特定的代码路径并继续在所有其他方面正常运行?
但我认为我无法如此轻松地(完全?)创建向后兼容模式,因为必须首先引用 4.5 程序集才能使用 ZipFile。
附带说明,我已经实现了对安装的框架版本的检测。如果检测到
【问题讨论】:
【参考方案1】:最简单的方法可能是动态加载所需的代码。
如果检测到 .NET 4.5,您可以使用反射来查找所需的程序集、类和成员。您可以将结果缓存在委托中,以避免每次都反映。
您也可以使用插件系统,其中添加 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
。这可能会破坏更多。
【讨论】:
我不敢相信我没有想到这一点,只需将 ZipFile 部分放入插件中就很棒。感谢您的帮助。【参考方案2】:构建 .exe 的两个版本(分别为目标 4.0 和 4.5)。 在安装过程中,检测 .Net 版本并提取与 .net 版本匹配的 .exe。
【讨论】:
以上是关于.NET 4.5 应用程序在具有 .NET 4.0 的系统上的特定功能兼容性的主要内容,如果未能解决你的问题,请参考以下文章
安装 .NET 4.5 真的会取代 .NET 4.0 程序集吗?
为啥 .Net 4.0 构建客户端 DataContracts 会导致 .Net 4.5 应用程序中的 MethodAccessException?
XmlSerializer 空引用异常出现在 .NET 4.0 但不在 .NET 4.5