安装后程序集依赖关系发生变化

Assembly Dependencies Change After Installation

我有一个 .NET 应用程序,它的某些依赖版本似乎在调试和 运行ning 作为已安装的发布应用程序之间发生了变化。我将只关注 Castle.Core 程序集的详细信息,但同样的问题也发生在其他几个程序集上。我正在使用的 NuGet 包需要 Castle.Core 作为依赖项(我的所有问题都与源自 NuGet 的程序集有关,以防万一)。

在 Visual Studio 中,当我安装具有 Castle.Core 依赖项的 NuGet 包时,一切 运行 都很好,在调试和发布配置中都是如此。我可以看到 Castle.Core 项目引用引用的是版本 3.3.0.0。但是,当我使用 InstallShield 打包由 Release 配置生成的所有内容并安装应用程序时(所有程序集都位于同一程序目录中),我收到此 运行 时间错误:

Could not load file or assembly 'Castle.Core, Version=3.2.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

NuGet 包将其对 Castle.Core 的依赖项列为 (≥3.2.0.0 && < 4.0.0.0)。 3.2.0.0 和 3.3.0.0 都满足这些条件。

如果我手动将 Castle.Core 降级到 3.2.0.0,我的项目的引用显示它确实降级了。但是当我 运行 Visual studio 中的项目时,我得到:

Could not load file or assembly 'Castle.Core, Version=3.3.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

内部异常:

Could not load file or assembly 'Castle.Core, Version=3.2.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

但是,如果我随后将其打包到安装程序中并将其作为已安装的应用程序启动,它就会起作用。

对我来说,将程序集打包到安装程序中的行为会导致依赖项版本发生变化。我无法想象会是这样,但我很难想出更好的解释。

任何人都可以解释这里发生了什么以及我如何解决它吗?

好的,明白了。首先,脸掌

通过 NuGet 添加的程序集对 Castle.Core 3.2.0 具有特定版本依赖性。但是,由于该程序集仍可与 Castle.Core 3.2.0-4.0.0 一起使用,因此程序集绑定重定向已添加到 App.config,向程序集加载器指示任何需要该范围内版本的程序集都应该尝试加载 Castle.Core 3.3.0,这是在我的应用程序安装程序中打包的版本。我没有意识到我没有在我的安装程序中包含配置文件,所以配置被 Visual Studio 加载没有问题,而安装的应用程序在应用程序目录中缺少该文件。

我有同样的问题,我只是降级到可用的最小起订量版本并且它有效。