是否有快速而肮脏的方式(或VS宏)将WinForms应用程序转换为控制台应用程序?我有许多这些应用程序不再需要作为Winforms应用程序。我想我可以创建一堆新项目并复制粘贴模块和类,但如果只是删除我拥有的单个表单并编辑/删除一些内容,我宁愿这样做。
答案 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格式打开了所有项目文件,然后使用“打开文档中的搜索和替换”更改了项目文件中的OutputType
和StartupObject
。
我创建了一个宏,它将为一个带有所需“主要”入口点和应用程序运行代码的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>