我已经迁移当前在VS2010到VS2012针对.NET 4.0的解决方案,现在我想重新定位它.NET 4.5
什么我不知道是的NuGet包。 例如EF5,这是我从EF4在VS2010更新,原来是实际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提供了一个功能,使这是一个简单得多:只是做update-package -reinstall -ignoreDependencies
从包管理器控制台。
的NuGet 2.0不处理重新定位你的应用程序非常好。 为了改变你的包的目标框架,您必须卸载并重新安装包(带您已经安装了,让你可以重新安装他们每个人的包注)。
该包装的原因,必须卸载并重新安装是:
- 当安装包,我们确定项目的目标框架
- 然后,我们匹配了包内容,找到合适的\ LIB \文件夹(\内容\文件夹中)
- 大会引用添加提示的路径指向包的\ LIB \文件夹中,用正确的子文件夹(\ LIB \ net40为例)
- 内容文件从包\内容\文件夹中复制,使用正确的子文件夹(\内容\ net40为例)
- 我们记录中使用的packages.config文件中安装的软件包的targetFramework
- 您更改项目的目标框架后,提示路径仍然指向net40
- 当您卸载包,我们检查记录在packages.config,看看有什么目标框架的libs的targetFramework /内容,从项目中删除
- 当你安装了这一软件,我们检测到您的更新目标框架和参考/复制权库/内容
对于那些谁曾与问题的update-package -reinstall <packagename>
命令,考虑运行它-ignoreDependencies
标志,就像这样:
update-package -reinstall <packagename> -ignoreDependencies
此标志将离开你独自包依赖关系,否则他们可能会得到更新,即使你本来想重新安装包仍然保持它的版本相同。
更多信息这里 。
不成功尝试接受的答案后,我想提出一个风险较小的命令:
Update-Package <PackageName> -ProjectName <ProjectName> -Reinstall -IgnoreDependencies
欲了解更多信息: http://blog.nuget.org/20121231/a-quick-tutorial-on-update-package-command.html
虽然尝试重新安装宽包解决方案,我遇到了一个相关性错误(尽管使用的-ignoreDependencies
标志),以及所有为每个项目的packages.config文件已被删除。 在VS2013,似乎packages.config不会被刷新回磁盘,并重新添加,直到所有的升级依赖性/引用重新连接到该项目。
在我的情况什么工作是每个项目都有一个-AT-A-时间通过添加升级-ProjectName
项目名称的update-package
的命令。 在这种情况下,每个项目都升级packages.config被更新。
可能不是非常大的实用的解决方案,但它似乎是一个合理的妥协仍然利用尽可能多的项目,尽可能自动化升级并分离出有问题的人,而不必在你的解决方案失败删除每packages.config。
文章来源: Retargeting solution from .Net 4.0 to 4.5 - how to retarget the NuGet packages?