Nuget re-targeting after upgrading from .Net Framework 4.5 to 4.6.1
我有一个.NET解决方案,大约有30个项目,所有项目都以.NET Framework 4.5为目标。每个都引用至少3-4个nuget包。
我们现在需要将它们更新到.NET Framework 4.6.1。所以我需要知道的是:
我是否也需要重新定位nuget包,或者我可以跳过它,因为这将是一个"就地"升级?
如果是,我可以只更新每个项目的packages.config文件,将每个nuget包的targetframework="net45"替换为targetframework="net461"吗?我看到一些线程建议卸载,然后通过"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
- docs.microsoft.com/en-us/nuget/consume-packages/…
包装不会自动重新包装,但这是一个自动固定的包装。
In package manager console simply run:
1
| Update-Package -Reinstall |
This will force the package manager to reinstall every package in every project(without changing the version of the referenced package).
通过在新的框架之后重新整理包装,目标是改变所有参数,以正确的版本。
你也可以用以下手段对付一个单一的项目:
ZZU1
我使用了这一技术,用了很多时间来确定无效的参考问题。
- 只需一句话,就可以让它更快一点。添加-忽略依赖项:Update-Package -Reinstall -IgnoreDependencies。
- 理论上讲,一个不同的目标包不能有不同的依赖性,在这种情况下,IgnoreDependencies可能是不明智的吗?
- 这是一个很好的观点。我以前使用过ignoredependancies,但主要是在重新安装包以修复引用问题等时。我可以确定它在哪里可能导致框架目标更新问题。
- 对于更具体的重新安装,我可以建议如下:Update-Package Package.Name.Here -Reinstall -ProjectName Project.Name.Here
- 这太好了……直到您对引用预发布包的项目运行它。有什么已知的解决办法吗?
- 我想你只需要加一个-IncludePrerelease标志
1 Find all CSPROJ files and replace.
1
| <TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion> |
与
1
| <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion> |
开放包装经理控制台与运行
1
| Update-Package -Reinstall -IgnoreDependencies |
3找到所有的解决办法,然后建立每一个。
- 步骤3还应自动处理packages.config的步骤2。
- @雷维加,请再解释一下。你能编辑并演示一下怎么做吗?
- 如果我跳过步骤2,而是在步骤1之后立即执行步骤3,那么packages.config文件的targetFramework属性将自动进行修改,以匹配csproj的新targetFramework。至少,这就是我使用nuget.exe 4.3.0.440版并从4.5->4.7升级的方法。基本上,它为我节省了一些工作,不必为每个项目手动编辑这些包文件。
- find和replace很好地工作,但是仔细检查web.config中的element以确保您也对其进行了更改。
用-
更新包
MGX1〔0〕