我已将当前针对 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 的最佳做法是什么?
NuGet 2.1 提供了一项功能,使这变得更加简单:只需从包管理器控制台执行 update-package -reinstall -ignoreDependencies
。
NuGet 2.0 不能很好地处理重新定位您的应用程序。为了更改包的目标框架,您必须卸载并重新安装包(记下您已安装的包,以便重新安装它们)。
必须卸载并重新安装软件包的原因是:
安装包时,我们确定您项目的目标框架
然后我们将其与包内容匹配,找到合适的 \lib\ 文件夹(和 \content\ 文件夹)
程序集引用添加了指向包的 \lib\ 文件夹的提示路径,以及正确的子文件夹(例如 \lib\net40)
内容文件从 packages \content\ 文件夹复制,带有正确的子文件夹(例如 \content\net40)
我们在 packages.config 文件中记录用于安装包的 targetFramework
更改项目的目标框架后,提示路径仍指向 net40
当您卸载包时,我们会检查 packages.config 中记录的 targetFramework 以查看要从您的项目中删除哪些目标框架的库/内容
当您重新安装软件包时,我们会检测您更新的目标框架并引用/复制正确的库/内容
对于那些对 update-package -reinstall <packagename>
命令有问题的人,请考虑使用 -ignoreDependencies
标志运行它,如下所示:
update-package -reinstall <packagename> -ignoreDependencies
此标志将单独保留您的软件包依赖项,否则即使您最初想要重新安装的软件包仍保持其版本不变,它们也可能会被更新。
更多信息here。
get-package | % { update-package $_.Id -reinstall -ProjectName $_.ProjectName -ignoreDependencies }
在尝试接受的答案失败后,我想建议一个风险较小的命令:
Update-Package <PackageName> -ProjectName <ProjectName> -Reinstall -IgnoreDependencies
欲了解更多信息:http://blog.nuget.org/20121231/a-quick-tutorial-on-update-package-command.html
-reinstall
只会安装相同的版本,因此看不到使用 -safe
的任何好处。我错过了什么吗?
在尝试在整个解决方案范围内重新安装软件包时,我遇到了一个依赖错误(尽管使用了 -ignoreDependencies
标志),并且每个项目的所有 packages.config 文件都已被删除。在 VS2013 中,似乎 packages.config 不会被刷新回磁盘并重新添加,直到所有升级的依赖项/引用都重新附加到项目中。
在我的情况下,通过将 -ProjectName
projectname 添加到 update-package
命令来一次升级每个项目是可行的。在这种情况下,packages.config 会随着每个项目的升级而更新。
对于非常大的解决方案可能不实用,但似乎是一个合理的折衷方案,仍然利用尽可能多的项目的自动升级并隔离有问题的项目,而不会在失败时删除解决方案中的每个 packages.config。
UpdatePackage -Reinstall
删除了一些项目的 package.config 和项目引用(特别是其中生成了假程序集的项目)。我们通过撤消对搞砸的项目的所有更改并运行来解决此问题:Update-Package -reinstall -ProjectName "PROJECTNAME" -IgnoreDependencies
在 Visual Studio for Mac 2019 中,右键单击 Packages 文件夹会在菜单中显示“重新定位”选项。这解决了项目中需要重定向的所有包的重定向问题。看起来在 Visual Studio for Mac 的工具菜单下没有 NuGet 包管理器(至少在我的),所以我无法启动包管理器控制台。
https://i.stack.imgur.com/LSij8.png
update-package -reinstall
。所有软件包都开始卸载和更新,突然 Windows 8 重新启动,当它回来时它告诉“你的电脑遇到问题并重新启动。你想向微软发送信息吗?” :( 吓人...顺便说一句,这是我现在安装的 NuGet 版本:2.2.40116.9051
在此处打开了一个问题:nuget.codeplex.com/workitem/3049