答案1
不是。除非我们谈论的是。网它要求您根据编译器安装框架版本 X。
其他一切都只会抛出错误。幸运的话,你会得到missing dll xxxx.dll
。尽管大多数安装程序都会包含运行软件所需的库。
答案2
编辑于 2014/4/4:嘿 OP,看看今天刚刚发布的内容:
我只是想对已接受的答案进行一些扩展,因为它的细节有点少。 Filipe 的回答没有提到 Windows 实际上采取的策略做用于解决或缓解程序依赖性问题,如组件存储(WinSxS)、全局程序集缓存、MSI 系统等。但另一方面,他基本上正确的是,开发人员有责任将所有自定义库包含在应用程序内,并在提交安装事务之前检查依赖项是否存在。
Windows 的模块化程度不如 Linux,这有其优点和缺点。缺点是,Windows 更加单一,这意味着操作系统中可移除或可选的组件相对较少,不像 Linux 那样。(尽管 Windows 在这方面正在慢慢进步。)
但从好的方面来看,这意味着开发人员能够对用户机器上已经存在的库做出更多的假设。一旦安装,这些库的各个版本将被存储并排在组件存储中,这样您就不再会有 App1 大声喊着需要 crapDLL.dll,而 App2 也大声喊着同时需要不同版本的 crapDLL.dll 等等。
答案3
在 Windows 中,软件作者负责为其库提供版本控制。Windows 有一些工具可帮助实现这一点。
Windows Installer 和 Trusted Installer 服务与安装程序 (.msi) 交互。还有一些称为“独立应用程序”和“并行程序集”的支持技术可帮助解决版本冲突。
对于 .NET 框架应用程序,有全局程序集缓存、强名称程序集和核心清单。
在 Windows 8 和 8.1 中,有 Windows 应用商店和 Windows 运行时库(win32 API 替代品)。
编辑:大多数这些技术的核心是程序集清单,即提供版本号、作者、相关程序集及其版本以及其他数据的嵌入式文件。
答案4
据我所知,Windows 处理的唯一依赖项是 Microsoft 特定的库。例如,如果您在 Windows 中安装 Blender 等开源程序,它将在其自己的单独 dll 文件中拥有 libavcodec 和 ffmpeg 库,如果您随后安装 OpenShot,它将在其自己的目录中安装自己的 libavcodec 副本,并且它们可能是完全不同的版本。当卸载软件以清理遗留的垃圾时,这可能是一场噩梦,并且它还会占用更多的磁盘空间和库冗余。