1

为简单起见,假设本地文件夹中没有 DLL,或涉及的配置文件,或发布者策略或自定义解析。引用 DLL 的唯一位置是在 GAC 中。

融合如何决定在 GAC 中选择哪个版本的 DLL(所有其他条件相同),优先级顺序是什么?

例如,如果在我的项目中,我引用了 10.5.0.0 版本的 DLL。它会选择 10.5.0.0 或 10.5.1.0 版本的 DLL。或者,如果我在 GAC 中只有版本 10.4.0.0,它会起作用还是会引发错误?这些规则是否会根据更改的主要/次要/构建/修订部分而改变?

如果项目引用“特定版本”设置为 True 或 False,这有何不同?

如果引用是 DLL 引用或项目引用,这有何不同?

我猜某处有一个 MSDN 网站说明了它是如何工作的,但我似乎找不到它。我不想覆盖行为,我只想知道默认行为是什么。

4

1 回答 1

1

它记录在 MSDN如何运行时定位程序集。特别是,只有在使用强名称加载程序集时才会搜索 GAC。可能仍然存在“重定向”到另一个程序集的发布者策略,但没有自动规则。

在我看来,GAC 只是 Microsoft 应该用于 .NET Framework 的东西,您可以通过在不使用 GAC 的情况下分发应用程序或库来消除很多痛苦(当然 .NET Framework 除外)。

引用程序集的特定版本是构建时属性,它不会影响运行时行为。但是,当程序集引用被编译为可执行文件时,版本将存储在可执行文件中,并且在运行时加载特定版本(在应用程序集重定向规则之后)。

总结一下:为了让 .NET 加载所请求的程序集的另一个版本,必须有一个程序集重定向。您的应用程序可以在 app.config 文件中提供重定向,并且 GAC 可以具有发布者策略。

于 2014-07-30T11:16:13.027 回答