【问题标题】:Nuget re-targeting after upgrading from .Net Framework 4.5 to 4.6.1 [duplicate]从.Net Framework 4.5升级到4.6.1后Nuget重新定位[重复]
【发布时间】:2016-07-01 15:25:16
【问题描述】:

我有一个包含大约 30 个项目的 .net 解决方案,所有项目都针对 .Net Framework 4.5。并且每个都引用至少 3-4 个 NuGet 包。

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

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

【问题讨论】:

  • 修改 packages.config 文件中的 targetFramework 对项目中引用的程序集没有影响,假设您没有使用 .xproj,因此这样做不是正确的更改。我猜想没有多少 NuGet 包具有明确针对 .NET 4.6 的程序集,所以我怀疑不需要重新定位任何东西。您应该能够查看 NuGet 包的 lib 目录以了解它们的目标。
  • 所以我最终将 75% 的 NuGet 包升级到了最新版本。升级后,大多数包的 targetFramework 属性自动设置为“net461”。有一些软件包我稍后会升级,升级后它们似乎可以正常工作。谢谢。
  • 从 4.5.* 升级到 4.* 将工作设计:msdn.microsoft.com/en-us/library/ff602939%28v=vs.110%29.aspx

标签: c# asp.net .net visual-studio-2013 nuget


【解决方案1】:

这些包不会自动重定向,但有一个自动修复。

在包管理器控制台中简单地运行:

Update-Package -Reinstall

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

通过在定位新框架后重新安装包,这会将所有引用更改为正确的版本。

您也可以使用以下命令对单个项目运行:

Update-Package -Reinstall -ProjectName Project.Name.Here

我已经多次使用这种技术来修复 nuget 引用问题。

【讨论】:

  • 一条评论可以加快速度。添加-IgnoreDependencies:Update-Package -Reinstall -IgnoreDependencies
  • 从理论上讲,不同的目标包不能有不同的依赖关系,在这种情况下IgnoreDependencies可能是不明智的?
  • 这是一个很好的观点。我过去使用过 IgnoreDependancies,但主要是在重新安装软件包以修复参考问题等时。我绝对可以看到它可能会导致框架目标更新出现问题的地方。
  • 我可以建议以下更具体的重新安装:Update-Package Package.Name.Here -Reinstall -ProjectName Project.Name.Here
  • 相信你只需要加上-IncludePrereleaseflag
【解决方案2】:

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

<TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion>

<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>

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

Update-Package -Reinstall -IgnoreDependencies

3 找到所有解决方案,然后对每个解决方案进行 msbuild。

【讨论】:

  • 第 3 步也应该自动处理 packages.config 的第 2 步。
  • @RayVega 请多解释一下。你能编辑并展示一下吗?
  • 如果我跳过第 2 步,而是在第 1 步之后立即执行第 3 步,所有 packages.config 文件的targetFramework 属性自动 被修改以匹配 csproj 的新 TargetFramework。至少,这就是我使用 nuget.exe 版本 4.3.0.440 并从 4.5 -> 4.7 升级的方式。本质上,它为我节省了一些工作,而不必为每个项目手动编辑这些包文件。
  • 查找和替换效果很好,但请仔细检查 web.config 中的 元素以确保您也对其进行了更改。
  • 从@Ray 跳过第 2 步的建议对我不起作用。仅通过(重新)构建所有内容来修改没有一个 packages.config 文件。我终于得到了完整的Update-Package -Reinstall,它运行良好。
【解决方案3】:

通过使用修复 -

更新包-重新安装

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-26
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-12
    • 1970-01-01
    相关资源
    最近更新 更多