在以往項目中,添加引用包,采用了nuget的引入方式,今天進行了代碼升級,遇到了一個nuget引用的問題,特此記錄下。
之前項目中集成signalR時,使用nuget的方式引入了相關的signalR包,包引用配置信息如下
1. 出現黃頁
在另外的代碼升級中,同樣使用相同的packages.config進行還原,編譯通過,運行時呈現了問題,一直出現StackExchange.Redis.StrongName依賴項版本錯誤的黃頁。
經過對nuget包的依賴項的查看發現,signalR的redis組件的依賴項為
使用的StackExchange.Redis.StrongName 的版本,最低為1.1.608
項目中同時使用了Microsoft.Web.RedisSessionStateProvider 2.23,他的依賴版本為
發現依賴項不同,默認運行時加載的依賴項版本找不到會產生黃頁。
2. 重新安裝
參考nuget依賴項解析地址:https://docs.microsoft.com/zh-cn/nuget/consume-packages/dependency-resolution,發現可以指定依賴項解析規則:最低適用版本、可變版本、選擇最近項和等距依賴項。
隨即,重新卸載引用包,重新安裝,然而在vs2017,nuget 2.80的版本下,安裝選項不存在依賴項解析規則的選擇:
頓時不開心了,重新引用,雖然安裝信息顯示是采用的最低適用版本,但是運行時仍然顯示黃頁。
3. 修改nuget配置
沒有辦法,猜測是否nuget的配置是否錯誤,重新找到C:\Users\Administrator\AppData\Roaming\NuGet\nuget.config文件,增加配置
重新安裝應用,依然無法解決。
4. webconfig的鍋?
在查看官方文檔時,返現文檔中提到
猜測是否web.config內存在dll的版本指定導致的,重新檢查web.config配置發現指定了配置:
刪掉此處指定的配置,重新運行網頁,黃頁消失。
問題產生原因:
1 在之前引用中引用了高版本的依賴項,nuget自動修改了webconfig的配置
2 在重新引用時,webconfig不會被重寫
3 添加nuget引用時,未指定安裝包的依賴規則
4 未仔細查看安裝包的依賴項版本
5 最好采用安裝包自動依賴項安裝,減少分別引入時的版本不匹配的問題