ASP.Net Core应用程序在visual studio中运行,但不适用于dotnet运行

我有一个asp.net核心应用程序,我开始通过visual studio构建,通常它按下F5或在visual studio中按调试按钮时工作正常。

但是,如果我尝试从命令行使用dotnet run ,它仍然可以工作并开始监听默认端口5000(我假设这是红隼监听)。 在此处输入图像描述

但是,如果我尝试使用http:// localhost:5000通过任何浏览器访问该页面,我只是得到错误,说无法连接。 我明白,如果我从visual studio运行,它会自动将我的应用程序放在IIS后面,但我不明白为什么如果应用程序只是自托管它不起作用。

我想把我的项目转移到linux环境,这是现在唯一似乎阻止我的事情。 我已经测试过通过cli创建新的dotnet应用程序,如果我尝试通过浏览器访问这些工作正常,它似乎我在VS中创建的这个特定的应用程序不起作用。

我的dotnet --version返回1.0.4

编辑(详细答案)

因此,为了增加Sanket下面的答案,我还想出了为什么我的应用程序只有在我将ASPNETCORE_ENVIRONMENT设置为开发时才能正常工作的真正原因。

事实certificate,我已经设置了一个测试邮件服务,只有在我的环境是开发时才配置:

  public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, WorldContextSeedData seeder) { if (env.IsEnvironment("Development")) { app.UseDeveloperExceptionPage(); loggerFactory.AddDebug(LogLevel.Information); } } 

但是在我的一个控制器中,我没有像这样检查环境,而是将电子邮件服务初始化:

 public AppController(IMailService mailService, IConfigurationRoot config, WorldRepository repository, ILogger logger, IHostingEnvironment env) { _env = env; _mailService = mailService; _config = config; _repository = repository; _logger = logger; } 

当我决定为Staging环境配置UseDeveloperExceptionPage()时,我意识到了这个问题,一旦我运行问题,它就变得很明显了。 我的控制器类在首先没有配置邮件服务时尝试初始化它。 所以我对控制器进行了一些更改,如下所示:

  public AppController( #if Development IMailService mailService, #endif IConfigurationRoot config, IWorldRepository repository, ILogger logger, IHostingEnvironment env) { _env = env; #if Development _mailService = mailService; #endif _config = config; _repository = repository; _logger = logger; } 

现在我的应用程序适用于任何环境。

发生错误,因为ASPNETCORE_ENVIRONMENT变量的值不同。 在Visual Studio的情况下,它设置为Development ,如果是dotnet cli(正如您在有问题的屏幕截图中看到的那样),那就是Production

要使用命令行设置ASPNETCORE_ENVIRONMENT变量,请使用以下命令 –

 setx ASPNETCORE_ENVIRONMENT "Development" 

有关如何设置托管环境的更多信息,请参阅此文章 。