从.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时将其删除。