【问题标题】:Convert Winform App to Console app将 Winform 应用程序转换为控制台应用程序
【发布时间】:2010-08-06 19:20:38
【问题描述】:

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

【问题讨论】:

  • 与其将类文件复制/粘贴到新项目中,我会考虑将它们复制/粘贴到新的类库项目中,以便您以后可以在任何类型的项目中重复使用它.

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


【解决方案1】:

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

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

【讨论】:

  • @Heath:这就是为什么我特别说他需要用命令行参数或配置替换表单功能的原因。我从来没有暗示这是一个自动过程 - 而是这些是将表单表单转换为控制台所需的步骤,我认为这是 100% 准确的。
  • @Heath:你可以不同意我的观点,但我没有编辑这个,因为我仍然觉得这是这里最完整的答案。 AMissico 的建议是手动编辑 VS 项目 - 与使用 VS 的工具进行更改相比,这更有可能以在 VS 中完全不可编辑的方式丢弃项目文件。不过,您不必同意我的看法,因为 SO 不是人气竞赛;)
  • @Heath:我从来没有说过它是次要的。如果表单除了显示一条消息什么都不做,那么是的,这是次要的。如果表格做了很多工作,那不是。这真的取决于所讨论的项目。
  • @Heath:我还建议完整地重新阅读@Otaku 的问题。他从未要求使用“单个按钮”来执行此操作 - 他的措辞清楚地表明他意识到他需要删除表单并编辑他的一些代码。
  • @Reed Copsey:这正是我所需要的。我的 WinForms 占用空间非常小(只是上面提到的一种形式),所以这可能是最简单的。
【解决方案2】:

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

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

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


根据评论更新

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

您只需将<OutputType>WinExe</OutputType> 更改为<OutputType>Exe</OutputType>。如果程序员不能在不出错的情况下对打开的文件进行简单的搜索和替换,那么他们就不应该在编程。

我必须为一个客户处理 50 多个应用程序。一位顾问告诉他们,做出改变需要一周的时间。我告诉我的客户,我可以在一个小时内现场完成。这项工作的难点在于堵车。

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

我创建了一个宏,它将添加一个“程序”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 项目转换为 Desktop/WinForms&Console/VB.NET 项目,在这些项目中我必须转换包含主要差异的项目和表单文件,尤其是表单文件。

在我看来,你们需要放松一下。十分钟后这些都不重要了。

【讨论】:

    【解决方案3】:

    相当烦人的是,将 输出类型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

    【讨论】:

      【解决方案4】:

      在 Visual Studio 2015 中,在 Project 菜单下选择 Properties,然后在 Output Type 下将下拉列表从 Windows Application 到 控制台应用程序。构建解决方案。完成。

      【讨论】:

        【解决方案5】:

        不,没有。这在很大程度上取决于程序最初是如何编写的。如果最初的程序员使系统相当模块化,那么这应该不会花费您太长时间。如果所有逻辑都在 WinForms 代码隐藏中,那么您需要做一些严肃的工作。

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

        【讨论】:

        • 这是迄今为止给出的 3 个中最现实、最翔实、最实用的答案。
        • 如果你必须像我一样更改 50 多个应用程序是不现实的。
        猜你喜欢
        • 1970-01-01
        • 2011-04-22
        • 2013-09-28
        • 1970-01-01
        • 1970-01-01
        • 2011-01-21
        • 1970-01-01
        • 2013-06-17
        • 1970-01-01
        相关资源
        最近更新 更多