【问题标题】:Assembly Dependencies Change After Installation安装后程序集依赖项发生变化
【发布时间】:2015-09-05 19:08:54
【问题描述】:

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

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

无法加载文件或程序集“Castle.Core,版本=3.2.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc' 或其之一 依赖关系。定位程序集的清单定义不 匹配程序集引用。 (HRESULT 异常:0x80131040)

NuGet 包将其对 Castle.Core 的依赖列为 (≥3.2.0.0 &&

如果我手动将 Castle.Core 降级到 3.2.0.0,我的项目参考显示它确实已降级。但是当我在 Visual Studio 中运行该项目时,我得到:

无法加载文件或程序集“Castle.Core,版本=3.3.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc' 或其之一 依赖关系。定位程序集的清单定义不 匹配程序集引用。 (HRESULT 异常:0x80131040)

内部例外:

无法加载文件或程序集“Castle.Core,版本=3.2.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc' 或其之一 依赖关系。定位程序集的清单定义不 匹配程序集引用。 (HRESULT 异常:0x80131040)

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

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

谁能解释这里发生了什么以及我可以如何解决它?

【问题讨论】:

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


    【解决方案1】:

    好的,想通了。一、掌心

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

    【讨论】:

    • 我永远不会想到这一点,感谢您回答自己的问题。
    • 为我节省了大量时间!
    • 所以解决方案是在您的安装程序中包含App.config
    • 我将 Caslte.Core 4.0.0 降级到 3.3,然后又降级到 4.0。那行得通。我认为 ReSharper 与它有关。
    【解决方案2】:

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

    【讨论】:

    • 我尝试修复程序集重定向,但它变得越来越复杂。降级对我有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-28
    • 2022-07-20
    • 1970-01-01
    • 2016-08-21
    • 2021-10-15
    • 2014-05-19
    • 1970-01-01
    相关资源
    最近更新 更多