如何将旧的WinForms项目迁移到新的VS2017项目格式

时间:2017-06-22 10:23:52

标签: c# .net winforms visual-studio-2017 msbuild-15

我们目前正在将项目升级到新的VS2017项目格式。这背后的主要原因是将一些库从PCL转换为.NetStandard,并能够使用新项目格式附带的新内置Nuget Package功能,从而摆脱整个nuget /库引用/依赖问题。

[编辑] 迁移解决方案中所有项目的主要原因是为了防止在混合旧(仍在使用.nuspec)和新格式项目时在.nupkg中无法获得正确的依赖性的问题

问题How-to migrate Wpf projects to the new VS2017 format的答案帮助我们在转换项目的WPF部分方面取得了很大进展。但是,我们仍然有大量的Windows窗体,无法替换或升级。

只需转换项目文件,为文件依赖项添加适当的设置(对于* .Designer.cs和* .resx文件),我们设法让它进行编译。

我们现在如何以制作Visual Studio 2017的方式声明项目项目 a)将它们识别为UserControl或Form? b)打开WinForms设计器工具来相应地编辑.cs或Designer.cs文件?

非常感谢任何寻找解决方案的暗示。

2 个答案:

答案 0 :(得分:6)

我不相信SDK风格的项目还支持各种设计师。虽然您可以使用嵌套文件来处理DependentUpon属性,但这样做的目的就是它。

也就是说,如果你的主要目的是使用新的NuGet功能并使用传递的NuGet引用,那么现有的项目系统现在支持这一点。

只需手动删除所有nuget包,然后删除packages.config文件。然后,您可能必须在csproj中设置<RestoreProjectStyle>PackageReference</RestoreProjectStyle>。执行此操作时,旧项目类型现在应使用PackageReference NuGet引用并执行传递恢复。

请注意,只有包以这种方式传递,项目到项目的引用不是,所以你需要p2p refs和之前一样。

答案 1 :(得分:0)

在.NET Core 3.0发行之后,现在支持WinForms,但是目前计划为Q4 2020设计器支持,并且可以使用Visual Studio 16.4 Preview 3或更高版本进行预览,必须设置工具->选项->预览功能->使用“ .NET Core应用程序的Windows窗体设计器的预览” 复选框,即可启用该功能。

SDK风格的项目应按以下步骤设置...

<ProjectSdk="Microsoft.NET.Sdk.WindowsDesktop">
  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>netcoreapp3.0</TargetFramework>
    <UseWindowsForms>true</UseWindowsForms>
  </PropertyGroup>
</Project>

在开始之前,建议您对项目运行Portability Analyzer,因为存在一些已知的差异/不兼容之处。还有另一个名为try-convert的工具,它将尝试转换您的项目。