Dot-Net
從 .Net 4.0 到 4.5 的重定向解決方案 - 如何重定向 NuGet 包?
我已將目前針對 VS2010 中的 .NET 4.0 的解決方案遷移到 VS2012,現在我想將其重新定位到 .Net 4.5
我不確定的是 NuGet 包。例如,我在 VS2010 中從 EF4 更新的 EF5 實際上是 EF 4.4,如您在此處看到的:
<Reference Include="EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> <HintPath>..\packages\EntityFramework.5.0.0\lib\net40\EntityFramework.dll</HintPath> </Reference>我還可以在項目的 packages.config 中看到以下內容:
<?xml version="1.0" encoding="utf-8"?> <packages> <package id="EntityFramework" version="5.0.0" targetFramework="net40" /> </packages>所以我的問題是:
將目前設置為面向 .NET 4.0 的所有 NuGet 包重新定位為面向 .NET 4.5 的最佳做法是什麼?
NuGet 2.1提供了一項功能,使這變得更簡單:只需
update-package -reinstall -ignoreDependencies從包管理器控制台執行。NuGet 2.0不能很好地處理重新定位您的應用程序。為了更改包的目標框架,您必須解除安裝並重新安裝包(記下您已安裝的包,以便重新安裝它們)。
必須解除安裝並重新安裝軟體包的原因是:
- 安裝包時,我們確定您項目的目標框架
- 然後我們將其與包內容匹配,找到合適的 \lib\ 文件夾(和 \content\ 文件夾)
- 程序集引用添加了指向包的 \lib\ 文件夾的提示路徑,以及正確的子文件夾(例如 \lib\net40)
- 內容文件從 packages \content\ 文件夾複製,帶有正確的子文件夾(例如 \content\net40)
- 我們在 packages.config 文件中記錄用於安裝包的 targetFramework
- 更改項目的目標框架後,提示路徑仍指向 net40
- 當您解除安裝包時,我們會檢查 packages.config 中記錄的 targetFramework 以查看要從您的項目中刪除哪些目標框架的庫/內容
- 當您重新安裝軟體包時,我們會檢測您更新的目標框架並引用/複製正確的庫/內容