从.Net 4.0到4.5的重定向解决方案 - 如何重新定位NuGet包?

时间:2012-08-17 13:42:37

标签: .net nuget visual-studio-2012 .net-4.5

我已将目前针对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的最佳做法是什么?

5 个答案:

答案 0 :(得分:255)

NuGet 2.1 提供的功能使这更加简单:只需从Package Manager控制台执行update-package -reinstall -ignoreDependencies

NuGet 2.0 无法很好地重新定位应用程序。要更改软件包的目标框架,必须卸载并重新安装软件包(记下已安装的软件包,以便重新安装每个软件包)。

必须卸载并重新安装软件包的原因是:

  • 安装软件包时,我们确定项目的目标框架
  • 然后我们将其与包内容进行匹配,找到合适的\ lib \文件夹(和\ content \ folder)
  • 使用指向包的\ lib \文件夹的提示路径添加程序集引用,使用右子文件夹(例如\ lib \ net40)
  • 内容文件从packages \ content \文件夹复制,右侧子文件夹(例如\ content \ net40)
  • 我们记录用于在packages.config文件中安装软件包的targetFramework
  • 更改项目的目标框架后,提示路径仍指向net40
  • 卸载软件包时,我们会检查packages.config中记录的targetFramework,以查看要从项目中删除的目标框架的库/内容
  • 当您重新安装软件包时,我们会检测您更新的目标框架并引用/复制正确的库/内容

答案 1 :(得分:41)

对于那些遇到update-package -reinstall <packagename>命令问题的人,请考虑使用-ignoreDependencies标志运行它,如下所示:

update-package -reinstall <packagename> -ignoreDependencies

此标志将仅保留您的软件包依赖项,否则即使您最初需要重新安装的软件包仍然保留其版本,它们也可能会更新。

更多信息here

答案 2 :(得分:21)

在尝试接受的答案失败之后,我想建议一个风险较小的命令:

Update-Package <PackageName> -ProjectName <ProjectName> -Reinstall -IgnoreDependencies

欲了解更多信息: http://blog.nuget.org/20121231/a-quick-tutorial-on-update-package-command.html

答案 3 :(得分:4)

在尝试重新安装解决方案范围时,我遇到了依赖性错误(尽管使用了-ignoreDependencies标志),并且每个项目的所有 packages.config 文件都已被删除。在VS2013中,似乎 packages.config 不会刷新回磁盘并重新添加,直到所有已升级的依赖项/引用都重新附加到项目中。

在我的案例中,通过将-ProjectName 项目名称添加到update-package命令,可以一次一个地升级每个项目。在这种情况下, packages.config 会在每个项目升级时更新。

对于非常大的解决方案可能不实用,但是仍然可以利用自动升级尽可能多的项目并在没有每个 packages.config 的情况下隔离有问题的项目,这似乎是一个合理的折衷方案。您的解决方案在失败时被删除。

答案 4 :(得分:0)

在Visual Studio for Mac 2019中,右键单击Packages文件夹在菜单中显示``重新定位''选项。这解决了项目中所有需要重新定向的软件包的重新定向问题。看来Mac上的Visual Studio(在我的系统中)至少在“工具”菜单下没有NuGet程序包管理器,所以我无法启动程序包管理器控制台。

Retarget menu option under Packages right-click menu