以编程方式设置应用程序输出类型

本文关键字:输出 类型 应用程序 设置 编程 方式 | 更新日期: 2023-09-27 18:11:39

我正在使用命令行应用程序输出类型编程一个应用程序,以便在MOGRE处理实际的窗口创建时在控制台中显示调试信息。我想隐藏控制台时,编译应用程序发布。不显示控制台可以很容易地通过进入项目属性,应用程序选项卡并将输出类型更改为windows应用程序来完成。当这样做时,只会显示MOGRE窗口。

虽然我相信创建一个windows应用程序并在其上附加一个控制台会更干净,但当人们想要这种行为时,我仍然好奇是否可以通过编程来实现。

也就是说,是否有一种方法可以以编程方式确定在调试模式下编译时应用程序编译为命令行应用程序,而在发布模式下编译为windows应用程序?如果可以,又该怎么做呢?

编辑:我是不是询问如何将控制台连接到windows窗体应用程序。

以编程方式设置应用程序输出类型

我把重要的部分用斜体字表示,希望能使我想表达的内容更清楚。

如果您手动编辑.csproj,您可以实现这一点:

    在解决方案资源管理器中右键单击项目节点
  • 选择"卸载项目"
  • 在解决方案资源管理器中右键单击项目节点
  • 选择"编辑MyApp.csproj"

<OutputType ../>属性组Xml元素从没有Condition<PropertyGroup .../> Xml元素移动到具有相应构建配置/平台条件的属性组

:

<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    ...
    <OutputType>Exe</OutputType>
    ...
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    ...
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    ...
  </PropertyGroup>
:后

<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    ...
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    ...
    <OutputType>Exe</OutputType>
    ...
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    ...
    <OutputType>WinExe</OutputType>
    ...
  </PropertyGroup>

并完成:

    在解决方案资源管理器中右键单击项目节点
  • 选择"Reload Project"

下面是一个证明的例子:

class Program
{
    public static void Main(string[] args)
    {
#if DEBUG
        Console.WriteLine("test");
#else
        Application.Run(new Form1());
#endif
    }
}

它可以工作,但我不认为这是官方支持的,所以使用你自己的风险:-)

不太确定,如果有纯。net的方式来实现你想做的事情,但是有一种方法可以通过使用Windows api来实现:

[DllImport("kernel32.dll", SetLastError = true)]
static extern bool AllocConsole();
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool FreeConsole();
[DllImport("kernel32", SetLastError = true)]
static extern bool AttachConsole(int dwProcessId);

下面的代码示例可能对您有所帮助:将控制台附加到Windows窗体应用程序