安装后的程序集依赖关系更改

Hot*_*otN 8 .net installer dependencies .net-assembly visual-studio

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

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

无法加载文件或程序集'Castle.Core,Version = 3.2.0.0,Culture = neutral,PublicKeyToken = 407dd0808d44fbdc'或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(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中运行该项目时,我得到:

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

内部例外:

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

但是,如果我将其打包到安装程序并将其作为已安装的应用程序启动,则可以正常运行.

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

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

Hot*_*otN 13

好吧,想通了.首先,facepalm

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