将Winform应用程序转换为控制台应用程序

7

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


2
与其将类文件复制/粘贴到新项目中,我建议将它们复制/粘贴到一个新的类库项目中,这样您以后可以在任何类型的项目中重用它。 - Mathias
5个回答

15

您可以更改项目设置,将其创建为控制台应用程序而不是 Windows 应用程序(在“解决方案资源管理器”中单击项目 Ctrl+Enter 并进行更改)。

这将编译应用程序作为控制台应用程序,并提供一个控制台。但是,您仍将获得窗体。如果您不想要 Windows Forms,您需要删除窗体并使用命令行参数或配置文件替换其功能。然后,您可以删除 Windows Forms 引用,并进行转换。


3
@Heath:这就是为什么我特别提到他需要使用命令行参数或配置来替换表单功能。我从未建议这是一个自动过程,而是认为这是将表单转换为控制台所需的步骤,我认为这是百分之百准确的。 - Reed Copsey
2
@Heath:你可以不同意我的观点,但我没有编辑这个答案,因为我仍然认为这是最完整的答案。AMissico的建议是手动编辑VS项目-这将更有可能以一种完全无法在VS中进行编辑的方式破坏项目文件,而不是使用VS的工具进行更改。不过,你不必同意我的看法,因为SO并不是一个人气比拼的地方 ;) - Reed Copsey
1
@Heath:我从未说过这是小问题。如果表单只是显示一条消息,那么是的,这是小问题。如果表单要做很多工作,那就不是了。这实际上取决于具体的项目。 - Reed Copsey
2
@Heath:我建议您再次完整阅读@Otaku的问题。他从未要求使用“单个按钮”来完成此操作-而且他的措辞清楚地表明他意识到需要删除表单并编辑一些代码。 - Reed Copsey
2
@Reed Copsey:这正是我所需要的。我的WinForms占用空间非常小(就像上面提到的只有一个表单),所以这可能是最简单的方法。 - Todd Main
显示剩余5条评论

6

没有,这取决于程序最初的编写方式。如果原始程序员使系统相当模块化,那么这不应该花费太长时间。如果所有逻辑都在WinForms代码后面,你需要做大量工作。

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


这是到目前为止给出的三个答案中最真实、信息量最大和最实用的答案。 - Heath Hunnicutt
1
如果像我一样需要更改50多个应用程序,那是不现实的。 - AMissico

4
当我需要做这件事情时,我创建了一个空白的WinForm和一个空白的控制台项目,然后比较它们之间的差异。这些差异很小。我在Visual Studio中打开所有项目作为XML文件,然后根据差异需要进行查找和替换。效果很好。
然后我打开每个项目并修复任何错误,例如缺少入口点方法等。
此外,您可以记录临时宏来完成一些乏味的工作。

根据评论更新

"Windows Forms"和"Console"应用程序之间的项目文件差异很小。也许我应该使用词“微不足道”。
您只需要将<OutputType>WinExe</ OutputType>更改为<OutputType>Exe</ OutputType>。如果程序员无法在打开的文件中进行简单的查找和替换而不犯错,则他们不应该从事编程。
我为客户处理了50多个应用程序。一位顾问告诉他们需要一周时间才能进行更改。我告诉我的客户,我可以在一个小时内完成,并且还可以现场完成。这项工作的难点是被堵在交通上。
我打开所有项目文件作为XML,然后使用“在打开的文档中”搜索并替换项目文件中的OutputType StartupObject
我创建了一个宏,将添加具有所需“main”入口点和应用程序运行代码的“program”VB.NET模块和C#类的另一个宏。
在达到这个阶段后,我编写了一个小程序,可以在Visual Studio 2008中加载每个项目。根据项目是VB.NET还是C#,我运行适当的宏。我会修复任何错误,编译,运行应用程序,然后关闭。小程序接着会启动另一个Visual Studio并打开下一个项目。该实用程序最难的部分是获取所有项目的路径,因为我必须使用DOS,如dir /b /s *.vbproj > c:\project_listing.txt
如果OP只有少量项目,则建议他们打开每个项目并进行所需更改。
我已经使用类似的技术将约20个WinCE / WinForms&Console / VB.NET项目转换为桌面/ WinForms&Console / VB.NET项目,其中我必须转换包含主要差异(特别是窗体文件)的项目和窗体文件。
在我看来,你们这些人需要放松一下。未来十分钟内都不会再提起这个问题。

3
在Visual Studio 2015中,选择“项目”菜单下的“属性”,然后在“输出类型”下拉菜单中将“Windows应用程序”更改为“控制台应用程序”。构建解决方案。完成。

1
非常恼人的是,将输出类型Windows应用程序切换到控制台应用程序不再适用于.NET Core目标(.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的解释


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接