本文介绍如何将Windows窗体桌面应用从。NETFramework迁移到。NETSDK格式或。NET6或更高版本。。NETSDK支持Windows窗体应用程序。Windows窗体仍是仅适用于Windows的框架,并且只能在Windows上运行。 将应用从。NETFramework迁移到。NETSDK格式或。NET6通常需要一个新的项目文件。NET6使用SDK样式的项目文件,而。NETFramework通常使用较旧的VisualStudio项目文件。如果你曾经在文本编辑器中打开过VisualStudio项目文件,你就会知道它有多么详细。SDK样式的项目较小,不需要像旧版项目文件格式那样多的条目。备份项目 迁移项目的第一步是备份项目!如果出现问题,可以通过还原备份将代码还原为其原始状态。不要依赖于。NET可移植性分析器等工具来备份项目,即使它们似乎可以完成备份。最好是亲自创建原始项目的副本。卸载工程,编辑项目文件 剪切所有内容到记事本。添加空白项目文件ProjectSdkMicrosoft。NET。SdkPropertyGroup!选一种自己需要的方式TargetFrameworknet6。0windowsTargetFrameworkTargetFrameworknet461TargetFrameworkTargetFrameworksnet6。0net461;TargetFrameworks!如果是库,这句直接删除,库不需要定义OutputType设置OutputTypeWinExeOutputTypeGenerateAssemblyInfofalseGenerateAssemblyInfoUseWindowsFormstrueUseWindowsFormsPropertyGroupProjectRootNamespaceFreeRes2019RootNamespaceFreeRes2019AssemblyName节点 所有的单独节点内容直接全部复制到新项目下面 例如PropertyGroupRootNamespaceFreexxx2019RootNamespaceFreexxx2019AssemblyNamePropertyGroupPropertyGroupGenerateManifestsfalseGenerateManifestsPropertyGroup 复制到ProjectSdkMicrosoft。NET。SdkPropertyGroup!选一种自己需要的方式TargetFrameworknet6。0windowsTargetFrameworkTargetFrameworknet461TargetFrameworkTargetFrameworksnet6。0net461;TargetFrameworks!如果是库,这句直接删除,库不需要定义OutputType设置OutputTypeWinExeOutputTypeGenerateAssemblyInfofalseGenerateAssemblyInfoUseWindowsFormstrueUseWindowsForms!复制到这里RootNamespaceFreexxx2019RootNamespaceFreexxx2019AssemblyNameGenerateManifestsfalseGenerateManifestsPropertyGroupProject引用升级 对于这种直接复制到新项目文件即可ContentIncludeTSCLIB。dllCopyToOutputDirectoryPreserveNewestCopyToOutputDirectoryContentReferenceInclude升级ItemGroupReferenceIncludeSystemReferenceIncludeSystem。CoreReferenceIncludeSystem。Xml。LinqReferenceIncludeSystem。Data。DataSetExtensionsReferenceIncludeMicrosoft。CSharpReferenceIncludeSystem。DataReferenceIncludeSystem。Net。HttpReferenceIncludeSystem。XmlItemGroup 新版ItemGroupImportIncludeSystemImportIncludeSystem。CoreImportIncludeSystem。Xml。LinqImportIncludeSystem。Data。DataSetExtensionsImportIncludeMicrosoft。CSharpImportIncludeSystem。DataImportIncludeSystem。Net。HttpImportIncludeSystem。XmlItemGroup工程引用 删除Project和Name节点复制过去ItemGroupProjectReferenceInclude。。AME。FreeResAME。FreeRes。csprojProject{bd216839c8704b5ab3e346bd5f7d8d6d}ProjectNameAME。FreeResNameProjectReferenceItemGroup 复制为ItemGroupProjectReferenceInclude。。AME。FreeResAME。FreeRes。csprojItemGroupCompile一般不需要复制ItemGroupCompileIncludeAttributeAttribute。csCompileIncludeDataTableBase。cs。。。ItemGroupNuGet包 如果项目引用了NuGet包,则项目文件夹中可能包含packages。config文件。对于SDK样式的项目,NuGet包引用是在项目文件中配置的。VisualStudio项目文件也可以选择在项目文件中定义NuGet包。。NET6不会将packages。config用于NuGet包。在迁移之前,必须将NuGet包引用迁移到项目文件中。ItemGroupPackageReferenceIncludeNewtonsoft。JsonVersion13。0。1VersionPackageReferenceItemGroup 改为ItemGroupPackageReferenceIncludeNewtonsoft。JsonVersion13。0。1ItemGroup要迁移packages。config文件,请执行以下步骤:在解决方案资源管理器中,找到要迁移的项目。右键单击packages。config将packages。config迁移到PackageReference。选择所有顶级包。系统会生成一个生成报告,让你知道与迁移NuGet包有关的任何问题。 库不需要定义设置。如果要升级库项目,请删除该条目。重载项目 将项目转换为新的SDK样式格式后,请在VisualStudio中重载项目: 在解决方案资源管理器中,找到要转换的项目。右键单击项目,选择重载项目。 如果项目加载失败,则可能是因为在项目的XML中引入了一个错误。打开项目文件以进行编辑,并尝试识别和修复错误。如果找不到错误,请尝试重启。编辑App。config 如果你的应用包含app。config文件,则删除元素:supportedRuntimeversionv4。0sku。NETFramework,Versionv4。5 对于App。config文件,有一些事项需要考虑。。NETFramework中的App。config文件不仅用于配置应用,还用于配置运行时设置和行为,如日志记录。。NET6(和。NETCore)中的App。config文件不再用于运行时配置。如果App。config文件包含这些部分,则不会考虑这些部分。实际项目 升级完成后,迁移的Windows窗体项目将类似于以下XML:ProjectSdkMicrosoft。NET。SdkPropertyGroup!选一种自己需要的方式TargetFrameworknet6。0windowsTargetFrameworkTargetFrameworknet461TargetFrameworkTargetFrameworksnet6。0net461;TargetFrameworks!如果是库,这句直接删除,库不需要定义OutputType设置OutputTypeWinExeOutputTypeGenerateAssemblyInfofalseGenerateAssemblyInfoUseWindowsFormstrueUseWindowsFormsPropertyGroupItemGroupProjectReferenceInclude。。MatchingGame。LogicMatchingGame。Logic。csprojItemGroupItemGroupPackageReferenceIncludeMetroFrameworkVersion1。2。0。3PackageReferenceIncludeMicrosoft。DotNet。UpgradeAssistant。Extensions。Default。AnalyzersVersion0。3。261602PrivateAssetsallPrivateAssetsPackageReferencePackageReferenceIncludeMicrosoft。Windows。CompatibilityVersion6。0。0ItemGroupProject 我自己的工程,升级项目文件后后,精简了不少 参考资料 https:docs。microsoft。comzhcndotnetcoreportingupgradeassistantwinformsframework https:docs。microsoft。comzhcndotnetdesktopwinformsmigration?viewnetdesktop6。0原文链接 https:www。cnblogs。comdensen2014p16158137。html