繁体   English   中英

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

[英]Retargeting solution from .Net 4.0 to 4.5 - how to retarget the NuGet packages?

我已经将目前在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提供了使它变得更加简单的功能:只需从Package Manager控制台执行update-package -reinstall -ignoreDependencies

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

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

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

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

update-package -reinstall <packagename> -ignoreDependencies

此标志将使您的程序包依赖项不受影响,否则即使您最初想要重新安装的程序包仍保持其版本不变,它们也可能会得到更新。

更多信息在这里

在尝试了无法接受的答案后,我想提出一个风险较小的命令:

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

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

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

在我的情况什么工作是给每个项目升级一个-AT-A-时间通过添加-ProjectName 项目名称update-package的命令。 在这种情况下,随着每个项目的升级, packages.config也会更新。

对于大型解决方案来说可能不切实际,但似乎仍是一个合理的折衷方案,即仍然对尽可能多的项目利用自动升级,并隔离有问题的项目,而不会因失败而删除解决方案中的每个package.config

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

包右键单击菜单下的重定向目标菜单选项

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM