Dot-Net

從 .Net 4.0 到 4.5 的重定向解決方案 - 如何重定向 NuGet 包?

  • August 17, 2012

我已將目前針對 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 以查看要從您的項目中刪除哪些目標框架的庫/內容
  • 當您重新安裝軟體包時,我們會檢測您更新的目標框架並引用/複製正確的庫/內容

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