重定向.NET 4.5.2解决方案中的所有项目

Kyl*_* V. 85 c# solution visual-studio visual-studio-2012

我在Visual Studio 2012中有一个解决方案,其中包含170个C#项目.我需要将.NET Framework 4.0中的所有项目重新定位到4.5.2.

我更喜欢让Visual Studio通过进入每个项目的属性,更改目标框架,并让Visual Studio对.csproj文件进行必要的更改来处理这个问题.

我注意到这些更改包括向.csproj添加一些新的XML标记,具体取决于当前项目的某些属性.

如何批量重新定位所有170个C#项目而不使用替换文本工具来替换目标版本号?我希望Visual Studio能够进行所有必要的标签修改和添加,并且单独更换将不允许这种情况发生.

Gra*_*ICA 76

MSDN文档" .NET Framework 4.5迁移指南 "和" 如何配置应用程序以支持.NET Framework 4或4.5 "仅讨论修改项目.没有关于立即对整个解决方案应用更改的详细信息,也没有在VS中看到支持它的功能.

但是,Visual Studio库中提供了一个名为Target Framework Migrator的(评级良好的)扩展,它支持升级到4.5.2(以及更新的版本**),看起来它可以完全按照您的需要进行操作.如果您有兴趣,可以在GitHub找到源代码.

请注意,缺少这样的功能可能是故意的(而不仅仅是遗漏).我只是猜测,但也许MS只计算需要新框架的项目才会升级.FWIW,如果你最终升级了一些与其他解决方案共享的项目,那么这些解决方案升级之前可能无法构建.

话虽这么说,如果你在一个只有一个(或几个)解决方案的小商店,并且你想要一次性升级所有东西,那么上述工具也许适合你.


**最近没有太多的发展.如果您无法使用较新的.NET Framework版本,请检查现有的PR问题以获取修复.例如,有人发布了.NET Framework v 4.7.1修复程序.希望这些最终会合并.

  • "目标框架迁移器"工具在最新的VS 2017更新15.5.5"无效参数"上失败 (6认同)
  • 开发者于 2019 年 12 月传递了接力棒,您可以再次编辑您的(好)答案:) (2认同)

JB.*_*ca. 10

由于目标框架迁移器坏了,我自己进行了搜索/替换(使用 git bash,它在 Windows 上可以正常工作);基本上它将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
Run Code Online (Sandbox Code Playgroud)

  • 我找到了这个,然后`Update-Package -ReInstall` 创造奇迹。谢谢! (4认同)

web*_*pat 8

对于.NET Framework解决方案,一个简单的“ 替换为文件 ”对我有用:

例如:从.NET Framework 4.5.2.NET Framework 4.7.2

package.config文件中,替换所有

targetFramework="net452" 
Run Code Online (Sandbox Code Playgroud)

targetFramework="net472" 
Run Code Online (Sandbox Code Playgroud)

* .csproj文件中,替换所有

<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion> 
Run Code Online (Sandbox Code Playgroud)

<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
Run Code Online (Sandbox Code Playgroud)

  • 哇,假期结束后又回到这个问题,也看到有必要对这个相同的答案发表评论,哈哈。我要补充的是,*.csproj 和packages.config 文件并不是唯一引用目标框架的文件。web.config 文件的各个部分中也有参考。例如,在 system.web 下,compilation 和 httpRuntime 标记具有需要更新的 targetFramework 属性。因此,这种“查找和替换”手动过程似乎是一个非常糟糕的想法,可能会使您的项目处于不一致和损坏的状态。 (3认同)
  • 更改 packages.config 中的 targetFramework 不会重新安装该框架的包,因此您仍然可能会得到错误的版本。您必须重新安装该软件包,或者至少删除您的软件包文件夹并恢复该软件包的正确版本。问题在于旧的packages.config模型,如果不重新安装,您对包的dll引用将定位到包的错误子目录中的错误dll。 (2认同)

小智 6

我已经构建了一个简单的工具来迁移整个解决方案的目标框架版本,因为Target Framework Migrator Extension不支持Visual Studio 2017.从我的GitHub存储库下载该工具https://github.com/Xpitfire/TargetFrameworkMigrator

我知道这不是最好的方式,但它对我有用,也许它也会帮助别人.