从.Net Framework 4.5升级到4.6.1后,Nuget重新定位

Vis*_*hal 113 .net c# asp.net nuget visual-studio-2013

我有一个包含大约30个项目的.net解决方案,所有这些项目都以.Net Framework 4.5为目标.每个引用至少3-4个NuGet包.

我们现在需要将它们更新为.Net Framework 4.6.1.所以这就是我需要知道的:

  1. 我是否还需要重新定位NuGet包,或者我可以跳过它,因为这将是"就地"升级吗?
  2. 如果是,我是否可以通过将targetFramework ="net45"替换为每个NuGet包的targetFramework ="net461"来更新每个项目的packages.config文件?我已经看到一些线程建议卸载,然后通过'update-package'命令重新安装包.我今天尝试了但是我最终遇到了一些错误.

Ken*_*ley 202

软件包不会自动重定向,但有一个自动修复程序.

在Package Manager控制台中,只需运行:

Update-Package -Reinstall
Run Code Online (Sandbox Code Playgroud)

这将强制程序包管理器重新安装每个项目中的每个程序包(不更改引用程序包的版本).

通过在新框架定位后重新安装软件包,这将更改所有对正确版本的引用.

您也可以针对单个项目运行此操作:

Update-Package -Reinstall -ProjectName Project.Name.Here
Run Code Online (Sandbox Code Playgroud)

我多次使用这种技术来修复nuget参考问题.

  • 一个评论让这个更快一点.添加-IgnoreDependencies:`Update-Package -Reinstall -IgnoreDependencies` (13认同)
  • 从理论上讲,不同目标的包不能有不同的依赖关系,在这种情况下`IgnoreDependencies`可能是不明智的? (7认同)
  • 我相信你只需要添加 `-IncludePrerelease` 标志 (3认同)
  • 对于更具体的重新安装,我可以建议以下内容:`Update-Package Package.Name.Here -Reinstall -ProjectName Project.Name.Here` (2认同)

OzB*_*Bob 28

1找到所有.csproj文件并替换

<TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion>
Run Code Online (Sandbox Code Playgroud)

<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
Run Code Online (Sandbox Code Playgroud)

2打开包管理器控制台并运行

Update-Package -Reinstall -IgnoreDependencies
Run Code Online (Sandbox Code Playgroud)

3找到所有解决方案,然后建立每个解决方案.

  • 如果我跳过第 2 步,而是在第 1 步之后立即执行第 3 步,所有 _packages.config_ 文件的 `targetFramework` 属性都会_automatically_ 被修改以匹配 csproj 的新 `TargetFramework`。至少,这就是我使用 nuget.exe 版本 4.3.0.440 并从 4.5 -&gt; 4.7 升级的方式。从本质上讲,它不必为每个项目手动编辑这些包文件,从而为我节省了一些工作。 (3认同)
  • @Ray 跳过步骤 #2 的建议对我不起作用。仅仅(重新)构建所有内容都不会修改任何一个packages.config 文件。我最终得到了完整的“Update-Package -Reinstall”,效果很好。 (2认同)

Dee*_*eep 5

通过使用修复 -

更新包-重新安装

在此输入图像描述

  • 这个答案对 @KenHundley 的旧答案没有添加任何新内容。 (2认同)