【发布时间】:2014-04-19 15:13:32
【问题描述】:
我有以下场景:
- A.dll 版本 1.0.0.1
-
B.dll 版本 1.0.0.1 依赖于 A.dll。引用设置为 SpecificVersion = False
<Reference Include="A"> <HintPath>A.dll</HintPath> <SpecificVersion>False</SpecificVersion> </Reference> C.exe 使用
Assembly.LoadFrom("B.dll")B.dll 加载
如果我将 A.dll 的版本更改为 1.0.0.2,我会在 Assembly.LoadFrom("B.dll") 上收到 FileNotFoundException,说它找不到 A.dll 1.0.0.1(当时只有 A.dll 1.0.02 存在,但应该没关系,因为 SpecificVersion 是假的)
【问题讨论】:
-
你只是误解了SpecificVersion的作用。它只在编译时起作用,从不在运行时起作用。 CLR 坚持在运行时进行精确 匹配,需要一个 .config 文件来说服它您没有犯错。您可能是,几乎没有充分的理由避免使用更新的 A 参考程序集来重建 B。
-
@HansPassant:签名不会改变。只是整个应用程序共享相同的内部版本号,所以唯一改变的是数字:S 我认为没有检查内部版本号,只有主要和次要值。我错了吗?
-
你有充分的证据证明你确实错了。
-
@HansPassant:我明白了。我不明白为什么我在构建时不需要它,但我在运行时需要它。有什么有趣的参考资料可以指点我吗?
-
@HansPassant 能否提供链接,详细说明为什么 CLR 坚持完全匹配?
标签: .net dll reflection assemblyversions