我有.Net Core Console应用程序。我一直在努力使同时运行Process
和听port
成为可能,这是我的方法:
这是我的program.cs
班:
class Program
{
static void Main(string[] args)
{
var ConsOut = Console.Out;
Console.SetOut(new StreamWriter(Stream.Null));
BuildWebHost(args).Start();
Console.SetOut(ConsOut);
while (true)
{
RunIbit();
}
}
public static IWebHost BuildWebHost(string[] args)
{
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true)
.AddCommandLine(args)
.Build();
var host = new WebHostBuilder()
.UseKestrel()
.UseConfiguration(config)
.UseStartup<Startup>()
.UseIISIntegration()
.Build();
return host;
}
public static void RunIbit()
{
// Execute Proccess.Start();
}}
这是Startup.cs
:
public class Startup
{
public Startup()
{
var builder = new ConfigurationBuilder().AddJsonFile("appsettings.json");
Configuration = builder.Build();
}
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddLogging();
var serviceProvider = services.BuildServiceProvider();
services.AddSingleton<IConfigurationRoot>(Configuration);
return WindsorRegistrationHelper.CreateServiceProvider(ContainerManager.Container, services);
}
public void Configure(IApplicationBuilder app){
app.Run(context => {
return context.Response.WriteAsync("Hello world");
});
}
}
由于我想在网页上显示该过程的结果,所以我一直在想,是否有可能以某种方式代替写Hello world
?
尝试添加app.UseMvc()
而不是app.Run(context => {
return context.Response.WriteAsync("Hello world");
});
,但它不适用于.net核心控制台应用程序,这是唯一对我有用(或至少对我发现的),但我找不到如何用html文件替换该文本。有人知道吗?
答案 0 :(得分:1)
我已经尝试了一段时间,以便可以同时运行Process和侦听端口
简短答案:
这是详细的操作方法:
我不确定您是要通过MVC解决方案还是通过静态html文件实现目标,因此我为您提供了两种解决方案:
计划A:我注意到您已经说过
试图添加app.UseMvc()...但是id无效
首先使用MVC配置控制台程序。
方案B:为控制台配置静态文件。
提醒一下,计划A或计划B都需要一个Microsoft.NET.Sdk.Web
SDK。因此,我们必须首先引用正确的SDK,即将项目sdk从Microsoft.NET.Sdk
更改为Microsoft.NET.Sdk.Web
:
<Project Sdk="Microsoft.NET.Sdk.Web">
<!-- ... -->
</Project>
.csproj
文件中添加软件包引用:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Folder Include="wwwroot\" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.5" />
</ItemGroup>
<ItemGroup>
<Content Update="appsettings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
</Project>
,然后您可以在Startup
类中配置MVC:
public void ConfigureServices(IServiceCollection services)
{
// ...
services.AddMvc(); // add mvc services here
// ...
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseMvcWithDefaultRoute(); // use mvc here
app.Run(context => {
return context.Response.WriteAsync("Hello world");
});
}
最后,您可以根据需要添加控制器和视图文件。例如,如果您添加带有Index操作的HelloController,并且对应的视图文件是:
@ { ViewData [“ Title”] =“索引”; }
它wooooooooooooooooooooooks
访问URL /hello
时,您将得到预期的响应
tes-console-with-mvc
您只需在项目中添加一个wwwroot
目录,然后使用UseStaticFiles()
方法中的Configure()
注册一个中间件:
public void Configure(IApplicationBuilder app, IHostingEnvironment env){
// ...
// app.UseMvcWithDefaultRoute();
app.UseStaticFiles(); // add a StaticFiles middleware here
app.Run(async context => {
await context.Response.WriteAsync("Hello,world");
});
}