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

标签 .net visual-studio dependencies installation .net-assembly

我有一个 .NET 应用程序,它的一些依赖项版本似乎在调试和作为已安装的发布应用程序运行之间发生了变化。我将只关注 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)

有一个内部异常(exception):

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 中添加了程序集绑定(bind)重定向,该重定向向程序集加载器指示任何需要该范围内版本的程序集都应尝试加载 CaSTLe .Core 3.3.0,这是打包在我的应用程序安装程序中的版本。我没有意识到我未能在安装程序中包含配置文件,因此 Visual Studio 毫无问题地加载了配置,而安装的应用程序在应用程序目录中缺少该文件。

关于.net - 安装后程序集依赖关系发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30944260/

相关文章:

c# - 尝试使用 CLR MD 查找对象根

c# - 如何在 C# 中实现内存事务作用域?

c# - 为什么我不能在扩展 List 的类中调用 OrderBy?

mysql - SSRS - 如何以通用表以外的样式布局查询结果

dependencies - Labview - 如何永久解决负载冲突

.net - (自动)将 CodePlex 项目迁移到 GitHub

visual-studio - 尝试安装 Visual Studio 2010 的 Productivity Power Tools 时出错

c++ - 无法链接CMake中的本地库

gradle - 使用 Gradle 将依赖项打包到 WAR 中,同时将临时依赖项留在 EAR 中

java - 包 org.hibernate.tool.hbm2x 不存在