【问题标题】:How do I change Application type programmatically in .NET application?如何在 .NET 应用程序中以编程方式更改应用程序类型?
【发布时间】:2014-07-03 19:13:19
【问题描述】:

程序需要几种依赖于参数的模式:

  • 测试模式 - 跟踪需要控制台窗口
  • 普通模式需要 Windows 窗体 GUI

我可以用 Application Type 构建应用程序:Console Application(为应用程序提供控制台窗口)和 Windows Forms Application(缺少控制台窗户)。没有应用程序类型满足我的要求。如果我将应用程序构建为控制台应用程序,则 Windows 窗体 GUI 中存在无用的控制台窗口。如果我将应用程序构建为 Windows 窗体应用程序 - 没有控制台窗口,我无法观察控制台跟踪。

我想我应该重定向控制台输出并将应用程序构建为 Windows 窗体应用程序,但我可以简单地以编程方式切换 应用程序类型(显示或隐藏控制台窗口本身?)

提前感谢您!

【问题讨论】:

  • 如果您的跟踪要输出到标准输出,您可以将它们重定向到您在调试窗口中显示的日志或字符串中,从而无需控制台。
  • 为什么不简单地将输出窗口添加到您的图形应用程序?然后您可以获得更好的复制和粘贴,以及您可能想要对文本执行的其他操作(如搜索或其他)。如果您想在生产中隐藏它,只要您没有运行调试配置,就不要添加任何显示该窗口的 UI 控件。如果它是您想要的文件输出,只需在您的应用程序中创建一个开关,当它在调试下编译时,它会在众所周知的位置发出一个跟踪日志文件。
  • 为什么需要控制台应用程序进行测试。为什么不直接使用测试框架进行测试,例如 NUnit?
  • @Arsham,当程序测试它的当前环境时,测试是模式。测试数据库连接,测试硬件密钥是否存在,测试其他外部系统依赖项。仅供管理员使用

标签: .net visual-studio


【解决方案1】:

正如我和其他人在 cmets 中提到的,您应该真正将您的跟踪发送到您在调试窗口中显示的日志或字符串,从而无需控制台。

但是,如果你真的想这样做,你可以将 csproj 文件中的<OutputType>WinExe</OutputType> 更改为<OutputType>Exe</OutputType>。这将运行您的 WinForms 项目并弹出一个控制台窗口。

看起来您可以根据运行的模式将 csproj 配置为具有不同的 OutputType: Changing csproj OutputType based on project configuration

【讨论】:

  • 执行程序时由参数设置模式。此时程序已编译 - 更改 csproj 中的任何内容都为时已晚。
  • 然后你回答了你自己的问题。您不能在运行时将项目编译为不同的类型。看起来方法是将跟踪写入命令行以外的其他内容。
猜你喜欢
  • 2023-03-24
  • 1970-01-01
  • 2016-09-05
  • 1970-01-01
  • 2012-07-24
  • 2014-03-07
  • 1970-01-01
  • 2012-09-29
相关资源
最近更新 更多