【发布时间】:2015-02-18 11:01:21
【问题描述】:
我们有以下情况/要求:
- 我们有多个项目使用相同的 DLL(我们开发的)。
- 不同的项目应该能够使用这些 DLL 的不同版本
- 一个项目内的应用程序都应使用相同的版本
- 应该可以更新单个项目的 DLL,这样该项目中的所有应用程序都会受到影响。其他项目不受影响。
- 每个应用程序都有自己的目录
这导致以下所需的文件夹结构:
SomePath
|- SomeProject
| |- DLL
| |- Application1
| \- Application2
|
\- OtherProject
|- DLL
\- ...
为了让不同的项目可以使用不同的版本,在 GAC 中注册是不可能的(是吗?)。 也无法使用probing private path 解决方案,因为该方法仅支持子目录,不支持父文件夹。
据我了解,Assembly.LoadFrom 可以工作,但意味着将这些库中的每个 new 类型调用替换为反射调用(或不是?),这意味着很多工作。
有没有一种方法可以引用指定的 DLL 而不必使用反射? IE。指定父文件夹的相对包含路径。
提示:开发机器为Windows 8.1,VS 2013;目标机器是 Windows 8.1
【问题讨论】:
-
不。这不是它的工作方式。
-
每个程序员都至少犯过一次这个错误,通常是好几次。学会尊重 DLL 地狱兽是不能教的,它必须经历。所以继续用枪指着你的脚。您不会从 CLR 获得任何帮助,您必须自己扣动扳机。实现 AppDomain.AssemblyResolve 事件。
-
AssemblyResolve 仍然需要我使用反射,不是吗?毕竟,这些库当前是在执行 Main() 之前加载的。
标签: .net assemblies