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

时间:2017-08-07 16:37:20

标签: c# visual-studio asp.net-core

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

但是,如果我尝试从命令行使用dotnet run,它仍然可以工作并开始监听默认端口5000(我假设这是红隼监听)。 enter image description here

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

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

我的dotnet --version返回1.0.4

编辑(详细答案)

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

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

    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<AppController> 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<AppController> logger, IHostingEnvironment env)
        {
            _env = env;
#if Development
            _mailService = mailService;
#endif
            _config = config;
            _repository = repository;
            _logger = logger;
        }

现在我的应用可以在任何环境中使用。

1 个答案:

答案 0 :(得分:3)

由于 ASPNETCORE_ENVIRONMENT 变量的值不同而发生错误。对于Visual Studio,它设置为Development,如果是dotnet cli(正如您在相关屏幕截图中看到的那样),则为Production

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

setx ASPNETCORE_ENVIRONMENT "Development"

有关如何设置托管环境的详细信息,请参阅此article