【问题标题】:Create "console" and "window" configurations in Visual Studio project在 Visual Studio 项目中创建“控制台”和“窗口”配置
【发布时间】:2010-07-12 20:10:30
【问题描述】:

我在 Visual Studio 2008 中有一个项目。我希望有两种不同的方式来运行它 - 作为常规的 Windows 应用程序(这样它有一个窗口,我可以做图形)或作为控制台应用程序(这样它没有窗口,也不做图形)。有没有办法设置它,以便我可以在运行时使用命令行选项或其他东西在这两个选项之间切换?有没有办法在同一个 Visual Studio 项目中设置两种不同的配置,以便我可以构建任何一种?还是我需要创建两个完全独立的项目,一个用于窗口应用程序,一个用于控制台应用程序。

【问题讨论】:

    标签: visual-studio window console-application


    【解决方案1】:

    是的,您可以使用配置管理器来创建新配置。每个配置的项目设置可以(是)不同的。因此您可以创建两个配置,并在项目设置中将输出类型设置为“Windows 应用程序”或“控制台应用程序”。

    您是这样做的:在“构建类型”下拉列表中(默认情况下带有“调试”和“发布”选项的选项),选择“配置管理器”。添加一个新配置并将其命名为“调试(控制台)” - 选择此新配置后,转到项目属性并将输出类型设置为控制台应用程序。重复以添加 Windows 窗体配置。

    【讨论】:

      【解决方案2】:

      推荐的(非hacky)方法是将所有逻辑放在类库中,然后为控制台和窗口应用程序创建两个单独的项目。然后按照 Chris 的建议添加类库作为对这些项目的引用。

      你不能有一个应用程序同时充当控制台一个窗口应用程序。原因基本上是控制台和窗口应用程序在二进制级别上不同,PE头中的标志不同。

      虽然有一些技巧可以让您使用 Windows API 函数(AttachConsoleCreateConsole)来伪造这种行为。详情见

      C#: Is it possible to have a single application behave as Console or Windows application depending on switches?

      但请注意,常规控制台或窗口应用程序的行为中可能存在 certain differences

      【讨论】:

        【解决方案3】:

        您可能需要考虑将您的项目一分为三。

        1. 执行工作的程序集/dll(取决于您的语言)。
        2. 一个控制台应用程序。
        3. Windows 应用程序。

        后两者只是完成所有工作的程序集/dll 上的两个不同接口。

        【讨论】:

          【解决方案4】:

          就像您拥有默认的 Debug 和 Release 配置一样,您可以创建自己的配置。 右键单击项目,选择“配置管理器”,单击“活动解决方案配置”下拉框并选择“新建..”。输入“CmdLine Debug”和“Windowed Release”等名称,删除其他配置。现在右键单击该项目,选择“属性”,然后为适当的配置调整所需的设置。

          Tp 让您的生活更轻松:将所有配置共有的属性放在属性表中,并在任何地方使用这些表。这样,如果您想更改适用于所有配置的选项,您只需执行一次。

          【讨论】:

          • 不,不幸的是它不能那样工作。输出类型,即是否创建控制台或窗口应用程序是不受活动配置影响的项目设置。
          • 嗯?我以为属性->链接器->系统->子系统指定了这个?
          • 抱歉,因为我假设的是 .NET 项目,所以没有编程语言。对于 C++ 可能会有所不同,但我怀疑是这样,主要是因为 Windows 应用程序必须有一个 WinMain 和一个消息循环,而控制台应用程序没有。
          • 刚刚检查过,如果我将控制台项目更改为使用 /SUBSYSTEM:WINDOWS,链接器会抱怨它找不到 _WinMain ..
          • ...您当然可以使用一些条件预处理器指令来处理它;-)
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多