前一段时间,我写了一篇关于迁移csproj格式的博客,将WPF、UWP和其他类型的旧csproj迁移到基于微软的新csproj中。NET.Sdk,但是整个过程都是手工进行的,最后处理XAML问题还是很头疼的。
现在,我们可以使用工具自动完成这个过程。当然,该工具不迁移csproj格式,而是在不迁移格式的情况下使用PackageReference模式NuGet引用。
本文内容
自动升级检查升级后的兼容性问题 install.ps1 脚本将失效 使用 content 方式指定的内容资产将失效 XDT 变换将失效 lib 根目录中的程序集将被忽略解决升级后的编译错误 参考资料 自动升级下载并安装Visual Studio插件NuGet包参考升级程序。安装完成后,再次启动Visual Studio,即可开始迁移。
更新:迁移工具从Visual Studio 2017的15.7版开始带入Visual Studio。有关详细信息,请参见:从package.config迁移到包参考格式-微软文档。
只有一个步骤:右键单击packages.config文件并选择升级到PackageReference。
在弹出的界面中,选择包版本,确认完成项目的迁移。
与之前编写的手动迁移相比,自动迁移模式并没有改变csproj的格式,只是将NuGet的引用模式改为PackageReference。要了解具体的好处,您可以阅读关于将WPF、UWP和其他类型的旧csproj迁移到基于Microsoft.NET.Sdk的新csproj
升级后检查兼容性问题
packages.config的NuGet包的管理模式有一些PackageReference没有的功能。当然,这些功能不可用,是因为“不需要”,而不是“还不支持”;因此,大部分迁移都不会成为问题(除非发布包使用了特别老的nuget.exe,或者发布者使用了一些疯狂的黑技术)。
在15.7版以上的Visual Studio 2017迁移工具中,会自动列出可能存在的兼容性问题。
install.ps1脚本将无效
使用PackageReference,install.ps1脚本将不再在安装和写入过程中执行。如果某些行为依赖于此脚本,则此NuGet包的行为可能不正常。
不过不用担心!install.ps1的存在是因为packages.config不支持PackageReference中的一些新特性(比如NuGet包中的新目录结构,比如包中的msbuild目标)。因此,如果NuGet包在发布时满足目录要求,即使不需要执行install.ps1,也能保证包的正常行为。
使用Content方法指定的内容资产将无效
PackageReference使用内容文件来管理内容资产,这些内容资产可以在多个依赖包之间更好地传输和共享。之前内容指定的资产将无效。
建议检查所有相关的NuGet包。如果您有权限修改某些依赖包,请使用内容文件而不是内容。
XDT转型将会失败
使用PackageReference,在安装和写入期间不会执行XDT转换。xdt文件将被忽略。
Web应用开发中要多注意这个问题。
lib根目录中的程序集将被忽略
lib文件夹中的程序集根据目标框架应该是子文件夹,比如net45、netstandard2.0、netcoreapp2.0,PackageReference要求只能引用某个目标框架下的程序集。
如果默认创建NuGet包,基本不会遇到这样的问题。除非您在创建NuGet包时有自定义操作,否则请将程序集放在根目录中。
升级后解决编译错误
最有可能的编译问题是NuGet包引用的版本冲突。
packages.config模式中的包引用需要在csproj文件中显式指定依赖包的版本,因此无论哪个版本用于依赖,最终都是由显式指定的版本指定的。
PackageReference的引用模式是自动管理依赖版本。只要每个包都在允许的版本范围内,版本就会被自动选择并显示在解决方案的引用中。
PackageReference依赖项冲突提示通常如下:
检测到版本冲突。请直接从项目中引用包来解决此问题。
NuGet。包装3 . 5 . 0->;NuGet。版本控制(= 3.5.0)
NuGet。配置4 . 0 . 0->;NuGet。版本控制(= 4.0.0)
也就是说,被引用的两个不同的包需要同一个包的不同版本,所以PackageReference不能隐式推断依赖包的版本。这时候就需要把项目的依赖模式改成之前的依赖模式。
当然,在制作和发布NuGet包时,要尽量使用非特定版本的依赖包,这样可以大大避免这个问题的影响。您可以阅读版本范围和通配符版本范围和通配符,了解如何指定没有特定版本的依赖包。
参考数据
Migrating from package.config to PackageReference formats - Microsoft Docspackages.config (PC) to PackageReference (PR) Migrator · NuGet/Home Wiki原地址:https://Walter LV . com/post/migrate-packages-config-to-package-reference . html
1.《完成packages 自动将 NuGet 包的引用方式从 packages.config 升级为 PackageReference》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《完成packages 自动将 NuGet 包的引用方式从 packages.config 升级为 PackageReference》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/jiaoyu/787947.html