保持简单,假设在本地文件夹中没有DLL,或涉及的配置文件,或发布策略或自定义分辨率。引用DLL的唯一位置是GAC。

融合如何决定GAC中的哪个版本(所有其他东西相等),优先级顺序是什么?

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

如果项目参考“特定版本”设置为true或false,则会有何不同?

以及如果参考是DLL参考或项目参考,则如何不同?

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

有帮助吗?

解决方案

它在如何运行时找到组件。特别地,只有使用强名称加载组件,才会搜索GAC。可能仍然有发布者策略,即“重定向”到另一个组件,但没有自动规则到位。

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

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

所以总结:为了加载,要加载另一个版本的组件,必须有一个装配重定向。您的应用程序可以在App.config文件中提供重定向。GAC可以具有发布者策略。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top