找回密码
 会员注册
查看: 165|回复: 0

ASP.NET CORE使用控制台程序调试web应用

[复制链接]

250

主题

1

回帖

819

积分

管理员

积分
819
发表于 2024-2-29 08:16:28 | 显示全部楼层 |阅读模式

在控制台程序中,我们可以使用 Console.WriteLine("debug") 便可以很方便查看日志输出。

但是在web应用中要做到实时查看日志输出就很麻烦,大致的做法有:

  1. 把日志信息输出到客户端
    在asp.net环境下用 Response.Write("debug log") ,在asp.net core环境下可用controller中使用 return Content("debug log") 将调试信息输出到浏览器进行查看,但是这样可能会打乱整个代码的逻辑,而且日志信息也会和前端页面混淆,效果不佳。

    2.用vs查看控制台信息
    在vs开发环境下,可以用 System.Diagnostics.Debug.WriteLine("debug log") 代替 Console.WriteLine("debug"),但是日志信息并不是在控制台输出,而是在vs的输出 窗口输出,而且必须是在F5调式模式下,但是在Debug调试模式下,项目会比非断点调试下慢很多,所以效果也不佳。

下面介绍,在asp.net core环境下,可以很方便的使用控制台console调试程序,大致方法有下面两个:

1,使用命令行启动web程序
首先,可以在Properties下的launchSettings.json指定监听的url。

这里写图片描述

  1. {
  2. "iisSettings": {
  3. "windowsAuthentication": false,
  4. "anonymousAuthentication": true,
  5. "iisExpress": {
  6. "applicationUrl": "http://localhost:5001/",//这个是由vs生成,指定调试模式下监听的地址,即ctrl+F5运行下使用的端口,可以自行修改,如果修改后无效,可以重启iis express
  7. "sslPort": 0
  8. }
  9. },
  10. "profiles": {
  11. "IIS Express": {
  12. "commandName": "IISExpress",
  13. "launchBrowser": true,
  14. "environmentVariables": {
  15. "ASPNETCORE_ENVIRONMENT": "Development"
  16. }
  17. },
  18. "coremvc": {
  19. "commandName": "Project",
  20. "launchBrowser": true,
  21. "launchUrl": "http://localhost:5000",//指定生产模式下(即正式使用时)监听的地址,默认是监听5000端口
  22. "environmentVariables": {
  23. "ASPNETCORE_ENVIRONMENT": "Development"
  24. }
  25. }
  26. }
  27. }
复制代码

然后,发布web项目。在项目图标上鼠标右键,就可以看到发布选项,新建自定义配置文件,然后根据提示操作便可,需要注意的是,在project.json中需要配置的选项

  1. "publishOptions": {
  2. "include": [
  3. "wwwroot",
  4. "**/*.cshtml",
  5. "appsettings.json",
  6. "web.config"
  7. ]
  8. },
复制代码

一般vs会自动帮我们生成配置,如果发布的时候没有包括前端文件,view或一些必要的文件,运行web时会报500错误。
发布后,就可以启动web应用了。
首先在用命令窗口打开发布文件所在的文件夹,然后运行dotnet 项目名.dll。
这里我把项目发布到项目里的bin\Release\PublishOutput

这里写图片描述

我的测试项目名是coremvc
这里写图片描述

这样便可以启动项目,代码中的Console.Writeline("") 都会在命令窗口中输入。

2,用控制台程序开发web
首先,创建一个.net core的控制台程序,项目结构十分简洁。

这里写图片描述

然后只需要修改Program.cs和添加Startup.cs文件就可以使用控制台程序转web应用。

对于Program.cs和Startup.cs文件的作用,不了解的同学可以看下下面介绍:
Program.cs
Startup.cs

ASP.NET Core 应用程序需要在宿主中执行,Program.cs用于创建宿主,Startup.cs用于设置程序配置并且将应用程序将要使用的服务连接起来。
代码如下:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Threading.Tasks;
  6. using Microsoft.AspNetCore.Hosting;
  7. namespace coremvc
  8. {
  9. public class Program
  10. {
  11. public static void Main(string[] args)
  12. {
  13. var host = new WebHostBuilder()
  14. .UseKestrel()
  15. .UseContentRoot(Directory.GetCurrentDirectory())
  16. .UseIISIntegration()
  17. .UseStartup<Startup>()
  18. .Build();
  19. host.Run();
  20. }
  21. }
  22. }
复制代码
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using Microsoft.AspNet.Builder;
  6. using Microsoft.AspNet.Hosting;
  7. using Microsoft.Extensions.Configuration;
  8. using Microsoft.Extensions.DependencyInjection;
  9. namespace CoreWebConsole
  10. {
  11. public class Startup
  12. {
  13. public Startup(IHostingEnvironment env)
  14. {
  15. var builder = new ConfigurationBuilder()
  16. .SetBasePath(env.ContentRootPath)
  17. .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
  18. .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
  19. .AddEnvironmentVariables();
  20. if (env.IsDevelopment())
  21. {
  22. // This will push telemetry data through Application Insights pipeline faster, allowing you to view results immediately.
  23. builder.AddApplicationInsightsSettings(developerMode: true);
  24. }
  25. Configuration = builder.Build();
  26. }
  27. public IConfigurationRoot Configuration { get; }
  28. // This method gets called by the runtime. Use this method to add services to the container.
  29. public void ConfigureServices(IServiceCollection services)
  30. {
  31. // Add framework services.
  32. services.AddApplicationInsightsTelemetry(Configuration);
  33. services.AddMvc();
  34. }
  35. // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
  36. public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
  37. {
  38. loggerFactory.AddConsole(Configuration.GetSection("Logging"));
  39. loggerFactory.AddDebug();
  40. app.UseApplicationInsightsRequestTelemetry();
  41. if (env.IsDevelopment())
  42. {
  43. app.UseDeveloperExceptionPage();
  44. app.UseBrowserLink();
  45. }
  46. else
  47. {
  48. app.UseExceptionHandler("/Home/Error");
  49. }
  50. app.UseApplicationInsightsExceptionTelemetry();
  51. app.UseStaticFiles();
  52. //app.UseMvc();
  53. app.UseMvc(routes =>
  54. {
  55. routes.MapRoute(
  56. name: "default",
  57. template: "{controller=Home}/{action=Index}/{id?}");
  58. });
  59. }
  60. }
  61. }
复制代码

对于这部分代码不熟的同学,可以先创建一个asp.net core的mvc web应用,然后直接复制黏贴里面的代码即可,黏贴后会报错,只要根据提示引入指定的程序包即可,引入程序包的时候要注意,要引入asp.net core的程序包,程序包和相关编译运行的配置可以在project.json中修改,但是由于需要引入的程序包较多,比容易跟asp.net的程序包弄乱,而且project.json配置文件相当重要,有一点错都会导致项目运行异常,所以建议直接拷贝web应用的project.json文件。

  1. {
  2. "dependencies": {
  3. "Microsoft.NETCore.App": {
  4. "version": "1.0.1",
  5. "type": "platform"
  6. },
  7. "Microsoft.ApplicationInsights.AspNetCore": "1.0.0",
  8. "Microsoft.AspNetCore.Diagnostics": "1.0.0",
  9. "Microsoft.AspNetCore.Mvc": "1.0.1",
  10. "Microsoft.AspNetCore.Razor.Tools": {
  11. "version": "1.0.0-preview2-final",
  12. "type": "build"
  13. },
  14. "Microsoft.AspNetCore.Routing": "1.0.1",
  15. "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
  16. "Microsoft.AspNetCore.Server.Kestrel": "1.0.1",
  17. "Microsoft.AspNetCore.StaticFiles": "1.0.0",
  18. "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
  19. "Microsoft.Extensions.Configuration.Json": "1.0.0",
  20. "Microsoft.Extensions.Logging": "1.0.0",
  21. "Microsoft.Extensions.Logging.Console": "1.0.0",
  22. "Microsoft.Extensions.Logging.Debug": "1.0.0",
  23. "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
  24. "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0"
  25. },
  26. "tools": {
  27. "BundlerMinifier.Core": "2.0.238",
  28. "Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview2-final",
  29. "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final"
  30. },
  31. "frameworks": {
  32. "netcoreapp1.0": {
  33. "imports": [
  34. "dotnet5.6",
  35. "portable-net45+win8"
  36. ]
  37. }
  38. },
  39. "buildOptions": {
  40. "emitEntryPoint": true,
  41. "preserveCompilationContext": true
  42. },
  43. "runtimeOptions": {
  44. "configProperties": {
  45. "System.GC.Server": true
  46. }
  47. },
  48. "publishOptions": {
  49. "include": [
  50. "wwwroot",
  51. "**/*.cshtml",
  52. "appsettings.json",
  53. "web.config"
  54. ]
  55. },
  56. "scripts": {
  57. "prepublish": [ "bower install", "dotnet bundle" ],
  58. "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
  59. }
  60. }
复制代码

接着,就可以跟普通的web应用一样,添加controller或者view了,最后,ctrl + F5非断点运行,在浏览器输入http://localhost:5000/访问,就可以访问网页了。

cmd

结果

默认情况下,asp.net core监听的是本机的5000端口,开发者可以根据实际需求进行修改,在Program.cs中配置。

  1. public static void Main(string[] args)
  2. {
  3. var host = new WebHostBuilder()
  4. .UseUrls("http://127.0.0.1:20000", "http://127.0.0.1:20001")
  5. .UseKestrel()
  6. .UseContentRoot(Directory.GetCurrentDirectory())
  7. .UseIISIntegration()
  8. .UseStartup<Startup>()
  9. .Build();
  10. host.Run();
  11. }
复制代码

cmd

至此,只要在程序的任意处加上 Console.WriteLine("debug") 便可以在控制台中看见日志信息了。

这里写图片描述

demo源码: 源码

学艺不精,如有错误,请在评论中指正,欢迎交流。


来源:https://blog.csdn.net/Chen_Victor/article/details/53055912
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?会员注册

×
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-27 00:01 , Processed in 0.479551 second(s), 27 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表