将解决方案中的所有项目重新定向到.NET 4.5.2
将解决方案中的所有项目重新定向到.NET 4.5.2
我在Visual Studio 2012中有一个解决方案,其中包含170个C#项目。我需要将所有项目从.NET Framework 4.0重新定向到4.5.2。
我希望通过进入每个项目的属性,更改目标框架,让Visual Studio对.csproj文件进行必要的更改来处理此操作。
我注意到这些更改包括根据当前项目的某些属性添加一些新的XML标签到.csproj中。
我该如何批量重新定向这170个C#项目,而不仅仅使用替换文本工具来替换目标版本号?我希望Visual Studio能够进行所有必要的标签修改和添加,而仅仅替换无法实现这一点。
问题:在解决方案中重新定位所有项目到.NET 4.5.2的原因是什么?以及解决方法是什么?
原因:由于“目标框架迁移工具”损坏,我自己编写了一个搜索/替换工具。基本上,它将v4.6.x更改为v4.7.2,然后将文件转换回使用臭名昭著的DOS的CRLF:
find . \( -iname '*.csproj' -o -iname '*.vcxproj' -o -iname 'app.config' \) \ -exec grep -Z -l 'v4\.6\..' \{} \; | xargs -0 sed -i 's/v4\.6\../v4.7.2/' find . \( -iname '*.csproj' -o -iname '*.vcxproj' -o -iname 'app.config' \) \ -exec grep -Z -l 'v4\.7\..' \{} \; | xargs -0 unix2dos
解决方法:我发现了这个解决方法,并且使用Update-Package -ReInstall
命令也非常有效。谢谢!这对我来说完全有效。谢谢您提供的解决方案。
对于PowerShell版本,请参考stackoverflow.com/a/2837891/463425。
问题:如何将解决方案中的所有项目重定向到.NET 4.5.2?
原因:MSDN文档中没有详细讨论如何一次性将更改应用于整个解决方案,也没有看到VS中支持此功能的函数。
解决方法:可以使用名为"Target Framework Migrator"的扩展来实现。该扩展可在Visual Studio库中找到,并支持升级到4.5.2版本(以及更新版本)。如果感兴趣,可以在GitHub上找到其源代码。
补充信息:缺少此功能可能是有意为之的,而不仅仅是遗漏。可能是因为微软认为只有需要新框架的项目才会升级。值得一提的是,如果升级了某些与其他解决方案共享的项目,那么在升级这些解决方案之前可能无法构建这些解决方案。
如果您只有一个(或几个)解决方案,并且希望一次性升级所有项目,那么上述工具可能适合您。
有人遇到与Anas(评论中)相同的错误,请查看现有的PR和问题以获取修复方法,但您可能需要自行应用这些修复方法。例如,有人发布了一个用于.NET Framework v 4.7.1的修复方法。希望这些修复方法会被合并,但不必抱太大希望。
如果其他人遇到与Anas相同的错误,请查看GitHub上的一个问题,该问题是几周前发布的,以及另一个可能相关的问题,该问题是2017年的。如果您遇到相同的问题,请考虑给它们点赞并添加更多细节。
在更新到4.7之后,VS 2017更新15.5.5上的“目标框架迁移”工具出现了错误“无效参数”。
在我今天使用VS 2017 15.7对Framework 4.7进行迁移时成功了。
我非常怀疑微软会有意删除对用户有益的功能...更有可能是他们没有考虑到或不需要支持...将其交给社区吧。
该工具在最新的VS2017 v15.8上完全无法加载和迁移到4.7。
我在现有问题中发表了评论。我实际上是通过在项目和配置文件中进行查找/替换来完成的。
提醒大家,它不支持Visual Studio 2019。
开发者在2019年12月将其传给了其他人,可以再次编辑你的(好的)答案。
在VS 2019中迁移到4.7.2。MarketPlace上的软件包已过时。下载并编译github.com/TargetFrameworkMigrator/TargetFrameworkMigrator VSIX项目。您应该在../bin/debug/文件夹中看到VSIX扩展。它还包括4.8框架。
在更新项目的目标框架后,应重新安装所有NuGet包。如果需要的话,VS会提醒你,但你也可以自行检查:learn.microsoft.com/en-us/nuget/consume-packages/reinstalling-and-updating-packages。