将Winform App转换为Console应用程序

时间:2010-08-06 19:20:38

标签: .net winforms visual-studio-2010 console-application

是否有快速而肮脏的方式(或VS宏)将WinForms应用程序转换为控制台应用程序?我有许多这些应用程序不再需要作为Winforms应用程序。我想我可以创建一堆新项目并复制粘贴模块和类,但如果只是删除我拥有的单个表单并编辑/删除一些内容,我宁愿这样做。

5 个答案:

答案 0 :(得分:14)

您可以更改项目设置以创建控制台应用程序而不是Windows应用程序(只需在解决方案窗口中按Ctrl + Enter键,然后进行更改)。

这会将应用程序编译为控制台应用程序,您将获得一个控制台。但是,您仍然可以获得表格。如果您不想使用Windows窗体,则需要删除窗体,并使用命令行参数或配置替换它们的功能。然后,您可以删除Windows窗体引用,它将被转换。

答案 1 :(得分:6)

不,没有。它非常依赖于程序最初的编写方式。如果原始程序员使系统相当模块化,那么这不应该花费太长时间。如果所有逻辑都在WinForms代码隐藏中,那么你需要做一些认真的工作。

这是手动编程/重构工作。

答案 2 :(得分:3)

当我不得不这样做时,我创建一个空白的WinForm和空白的Console项目,然后比较差异。差异很小。我在Visual Studio中将所有项目作为XML文件打开,然后根据差异根据需要进行搜索和替换。工作得很好。

然后我打开每个项目并修复了任何错误,例如缺少入口点方法等等。

另外,你可以录制一个临时宏来做一些平凡的事情。


基于评论的更新

“Windows窗体”和“控制台”应用程序之间的项目文件差异很小。也许我应该使用 trival

您需要做的就是将<OutputType>WinExe</OutputType>更改为<OutputType>Exe</OutputType>。如果程序员不能使用打开的文件进行简单的搜索和替换而不会出错,那么他们就不应该编程。

我必须为客户提供50多个应用程序。一位顾问告诉他们需要一周时间才能做出改变。我告诉我的客户我可以在一小时和现场完成。这项工作的艰难部分是陷入交通堵塞。

我以XML格式打开了所有项目文件,然后使用“打开文档中的搜索和替换”更改了项目文件中的OutputTypeStartupObject

我创建了一个宏,它将为一个带有所需“主要”入口点和应用程序运行代码的C#类添加一个“程序”VB.NET模块和另一个宏。

在这一点上,我写了一个小程序,它将在Visual Studio 2008中加载每个项目。我根据项目是VB.NET还是C#运行相应的宏。我会解决任何错误,编译,运行应用程序,然后关闭。然后,小程序启动另一个Visual Studio与下一个项目。该实用程序最难的部分是获取所有项目的路径,因为我必须使用DOS,如dir /b /s *.vbproj > c:\project_listing.txt中所示。

如果OP只有少数项目,那么我建议他们打开每个项目并进行必要的更改。

我使用类似的技术将大约20个WinCE / WinForms和Console / VB.NET项目转换为Desktop / WinForms和Console / VB.NET项目,我必须转换包含重大差异的项目和表单文件,尤其是表格文件。

在我看来,你需要减轻人们的负担。从现在起十分钟内,这一切都不重要。

答案 3 :(得分:2)

在Visual Studio 2015中,在项目菜单下选择属性,然后在输出类型下更改 Windows应用程序<的下拉列表/ strong>到控制台应用程序。构建解决方案完成。

答案 4 :(得分:1)

很烦人,将输出类型Windows应用程序切换到控制台应用程序不再适用于.net核心目标(.NET Core 3.0 、.NET Core 3.1、.NET 5.0)。控制台永远不会出现。

要恢复此功能,请编辑项目的 .csproj 文件并添加

<DisableWinExeOutputInference>true</DisableWinExeOutputInference>

到属性组。您的 .csproj 文件可能如下所示:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <DisableWinExeOutputInference>true</DisableWinExeOutputInference>
    <TargetFramework>net5.0-windows</TargetFramework>
    <UseWindowsForms>true</UseWindowsForms>
  </PropertyGroup>

</Project>

Microsoft's explanation