Dot-Net

安裝後程序集依賴項發生變化

  • July 31, 2016

我有一個 .NET 應用程序,它的一些依賴版本似乎在調試和作為已安裝的發布應用程序執行之間發生了變化。我將只關注 Castle.Core 程序集的詳細資訊,但同樣的問題也發生在其他幾個問題上。我正在使用的 NuGet 包需要 Castle.Core 作為依賴項(我的所有問題都與源自 NuGet 的程序集有關,以防萬一)。

在 Visual Studio 中,當我安裝帶有 Castle.Core 依賴項的 NuGet 包時,一切都執行良好,無論是在調試配置中還是在發布配置中。我可以看到 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)

但是,如果我隨後將其打包到安裝程序中並將其作為已安裝的應用程序啟動,它就可以工作。

對我來說,感覺就像將程序集打包到安裝程序中的行為會導致依賴項版本發生變化。我無法想像會是這樣,但我很難想出更好的解釋。

誰能解釋這裡發生了什麼以及我該如何解決?

好的,想通了。一、面相

通過 NuGet 添加的程序集對 Castle.Core 3.2.0 具有特定的版本依賴性。但是,由於該程序集仍然可以與 Castle.Core 3.2.0-4.0.0 一起使用,因此向 App.config 添加了一個程序集綁定重定向,它向程序集載入器指示任何需要該範圍內版本的程序集都應該嘗試載入 Castle .Core 3.3.0,這是我的應用安裝程序中打包的版本。我沒有意識到我沒有在我的安裝程序中包含配置文件,所以配置被 Visual Studio 載入沒有問題,而安裝的應用程序在應用程序目錄中缺少該文件。

引用自:https://stackoverflow.com/questions/30944260