从.Net 4.0到4.5的redirect解决scheme – 如何重新调整NuGet包?
我已经将目前在VS2010中将.NET 4.0作为目标的解决scheme迁移到VS2012,现在我想将其重新定位到.Net 4.5
我不确定的是NuGet包。 例如EF5,我从VS2010中的EF4更新,事实上是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作为目标.NET 4.5的所有NuGet包的最佳实践是什么?
NuGet 2.1提供了一个简单得多的function:只需从软件包pipe理器控制台执行update-package -reinstall -ignoreDependencies
。
NuGet 2.0不能很好地处理你的应用程序。 为了改变你的包的目标框架,你必须卸载并重新安装包(注意你已经安装的包,以便你可以重新安装每个包)。
必须卸载并重新安装软件包的原因是:
- 安装包时,我们确定你的项目的目标框架
- 然后,我们将其与包内容进行匹配,find相应的\ lib \文件夹(和\ content \文件夹)
- 程序集引用添加了提示path,指向包的\ lib \文件夹,右子文件夹(例如\ lib \ net40)
- 内容文件是从packages \ content \文件夹复制的,右边的子文件夹(例如\ content \ net40)
- 我们在packages.config文件中logging用于安装软件包的targetFramework
- 在更改项目的目标框架之后,提示path仍指向net40
- 卸载软件包时,我们检查packages.config中logging的targetFramework,以查看要从项目中移除的目标框架的库/内容
- 当您重新安装软件包时,我们会检测您的更新目标框架并引用/复制正确的库/内容
对于update-package -reinstall <packagename>
命令有问题的用户,请考虑使用-ignoreDependencies
标志运行它,如下所示:
update-package -reinstall <packagename> -ignoreDependencies
这个标志将会使你的包依赖单独出现,否则,即使你最初想要重装的包仍然保持它的版本不变,它们可能会被更新。
更多信息在这里 。
尝试接受的答案失败后,我想build议一个风险较低的命令:
Update-Package <PackageName> -ProjectName <ProjectName> -Reinstall -IgnoreDependencies
欲了解更多信息: http : //blog.nuget.org/20121231/a-quick-tutorial-on-update-package-command.html
在尝试重新安装包解决scheme的同时,我遇到了依赖性错误(尽pipe使用了-ignoreDependencies
标志),并且每个项目的所有packages.config文件都被删除了。 在VS2013中,似乎packages.config不会刷新到磁盘,并重新添加,直到所有升级后的依赖项/引用重新连接到项目。
在我的情况下,通过将-ProjectName
添加到update-package
命令,一次一个地升级每个项目。 在这种情况下, packages.config将在每个项目升级时更新。
对于非常大的解决scheme来说可能并不实用,但是仍然可以利用尽可能多的项目进行自动升级,并隔离有问题的解决scheme,而不必在解决scheme中删除每个packages.config时将其删除。