我已将目前针对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的最佳做法是什么?
答案 0 :(得分:255)
NuGet 2.1 提供的功能使这更加简单:只需从Package Manager控制台执行update-package -reinstall -ignoreDependencies
。
NuGet 2.0 无法很好地重新定位应用程序。要更改软件包的目标框架,必须卸载并重新安装软件包(记下已安装的软件包,以便重新安装每个软件包)。
必须卸载并重新安装软件包的原因是:
答案 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)