我试图弄清楚如何使用主机构建器模式来运行控制台应用程序(而不是 Windows 服务)。目的是保持流程与 WebApi 相似,以保持开发实践相似。我见过使用 HostedService 或 BackGroundService 的示例,他们希望将其作为 Windows 服务运行。但是,如果我想运行一个简单的控制台应用程序,我在哪里指定我的入口点类和方法?从 hostbuilder.Build() 中,我可以看到 Run() 和 RunAsync() 方法。但我无法弄清楚它会执行什么?
我已经看到了其他示例,您可以在其中创建 servicecollection,然后使用 serviceprovider.GetService().SomeMethod() 来启动该过程。但这有点偏离我们想要做的事情。所以请建议如何指定启动过程。我们正在使用 3.1 .Net Core。
class Program
{
static async void Main(string[] args)
{
var host = CreateHostBuilder(args).Build();
await host.RunAsync();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostBuilderContext, serviceCollection) => new Startup(hostBuilderContext.Configuration).ConfigureServices(serviceCollection))
.UseSerilog()
;
}
Run Code Online (Sandbox Code Playgroud) 我正在构建一个轻量级的ncurses库.到目前为止,它与VT100兼容终端的效果非常好,但是win32控制台无法将\033代码识别为转义序列的开头:
# include <stdio.h>
# include "term.h"
int main(void) {
puts(BOLD COLOR(FG, RED) "Bold text" NOT_BOLD " is cool!" CLEAR);
return 0;
}
Run Code Online (Sandbox Code Playgroud)

为了加载ANSI.SYS驱动程序并识别ANSI/VT100转义序列,需要在C代码级别上做什么?
我有一个用C#编写的控制台应用程序,计划使用内置的Windows任务计划程序每15分钟左右运行一次.
每次运行时,黑色控制台盒会在执行期间弹出,然后关闭.我没有在控制台上写任何东西.有没有办法在后台运行?
编写无限循环很简单:
while(true){
//add whatever break condition here
}
Run Code Online (Sandbox Code Playgroud)
但这会破坏CPU的性能.此执行线程将尽可能多地从CPU的电源中获取.
降低对CPU影响的最佳方法是什么?添加一些Thread.Sleep(n)应该可以解决问题,但为Sleep()方法设置高超时值可能表示对操作系统的应用程序无响应.
假设我需要在控制台应用程序中每分钟执行一次任务.我需要继续Main()在"无限循环"中运行,而计时器将触发将完成工作的事件.我想保持Main()对CPU的最小影响.
你有什么方法可以建议.Sleep()可以,但正如我已经提到的,这可能表明操作系统没有响应.
后期编辑:
我想更好地解释一下我在寻找什么:
我需要一个控制台应用程序不是Windows服务.控制台应用程序可以使用Compact Framework模拟Windows Mobile 6.x系统上的Windows服务.
只要Windows Mobile设备运行,我需要一种方法让应用程序保持活动状态.
我们都知道控制台应用程序运行只要其静态Main()函数运行,所以我需要一种方法来阻止Main()函数退出.
在特殊情况下(例如:更新应用程序),我需要请求应用程序停止,因此我需要无限循环并测试某些退出条件.例如,这就是为什么Console.ReadLine()我没用.没有退出条件检查.
关于上面,我仍然希望Main()函数尽可能地对资源友好.让我们确定检查退出条件的函数的指纹.
是否有一种"正确"的方式来清除C中的控制台窗口,除了使用system("cls")?
我发现了很多示例如何将控制台输出重定向到文件中.但是我需要一个相反的解决方案 - 我有StreamWriter,我希望在控制台输出中显示它sw.WriteLine("text");
无法执行以下代码错误CS5001程序不包含适用于入口点的静态"主"方法
这个错误信息是什么意思?
class Program
{
static async Task MainAsync(string[] args)
{
Account.accountTest accountTest = new Account.accountTest();
bool result = await accountTest.CreateAccountAsync();
}
}
Run Code Online (Sandbox Code Playgroud) c# console console-application visual-studio-2017 .net-core-2.0
我选择了控制台应用程序作为我的C#项目.但似乎在Windows窗体项目下工作的导入似乎不适用于此.它表示绘图命名空间不存在.
using System.Drawing;
using System.Drawing.Imaging;
Run Code Online (Sandbox Code Playgroud)
我的问题是我需要有位图类.我正在尝试制作一个命令行应用程序,对图像进行位图操作.这就是为什么我没有选择我的项目作为Windows窗体的一个.
有什么区别
public static void Main()
Run Code Online (Sandbox Code Playgroud)
和
private static void Main()
Run Code Online (Sandbox Code Playgroud)
在C#控制台应用程序中?具体而言,因为它涉及到Main()方法(I明白之间的差异public和private).
我有一个.NET Core 1.0.0控制台应用程序和两个环境.我需要能够使用appSettings.dev.json并appSettings.test.json基于我在运行时设置的环境变量.对于ASP.NET Core Web应用程序来说,这似乎非常简单,通过依赖注入和IHostingEnvironment以及EnvironmentName env.变量,但是我应该如何为控制台应用程序连接(除了编写我自己使用的自定义代码Microsoft.Framework.Configuration.EnvironmentVariables)?
谢谢.
c# ×8
.net ×2
.net-core ×2
console ×2
windows ×2
ansi-escape ×1
asp.net-core ×1
bitmap ×1
c ×1
namespaces ×1
ncurses ×1
terminal ×1