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

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

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

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

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

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

我的 dotnet --version 返回 1.0.4

编辑(详细答案)

因此,为了补充下面 Sanket 的回答,我还弄清楚了为什么只有当我将 ASPNETCORE_ENVIRONMENT 设置为 Development 时我的应用才能运行的真正原因。

事实证明,我已经将测试邮件服务设置为仅在我的环境是开发环境时才配置,如下所示:

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, 
        WorldContextSeedData seeder)
    {

        if (env.IsEnvironment("Development"))
        {
            app.UseDeveloperExceptionPage(); 
            loggerFactory.AddDebug(LogLevel.Information);
        }
    }

但是在我的一个 Controller 中,我没有像这样检查环境就初始化了邮件服务:

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() 时,我意识到了这个问题,当我在我的问题所在的地方运行它时,它就变得很明显了。我的 Controller 类试图在一开始没有配置邮件服务时初始化邮件服务。所以我像这样对我的 Controller 进行了一些更改:

        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;
        }

现在我的应用程序可以在任何环境中运行。

最佳答案

发生错误是因为 ASPNETCORE_ENVIRONMENT 变量的值不同。在 Visual Studio 的情况下,它被设置为 Development,在 dotnet cli 的情况下(如您在相关屏幕截图中所见),它被设置为 Production

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

setx ASPNETCORE_ENVIRONMENT "Development"

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

关于c# - ASP.Net Core 应用程序可在 visual studio 中运行,但不适用于 dotnet run,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45551787/

相关文章:

c# - 为什么 Visual Studio 在 Razor (.cshtml/.razor) 中突出显示双花括号?

asp.net-core - 如何在 ASP.NET 5 中配置电子邮件设置?

visual-studio - 我在Visual Studio C++项目中的哪里输入DLL依赖关系?

.net - 在 Visual Studio 中折叠所有文档标题/注释的快捷方式

c# - ASP.Net Core MVC 从 Select 控件的 View 访问 ViewModel

c# - VS 测试资源管理器未找到我的单元测试 (XUnit.Runner) ASP.NET 5

c# - 我需要从字符串中去除所有符号以创建一个忽略标点符号的 `IEqualityComparer`

c# - C# 桌面客户端连接到远程 MySQL 数据库的最佳方式是什么?

c# - 如果更改则重新加载 xml 文件

visual-studio - Visual Studio 2019 在哪里可以找到 .net core 3.1 的 WebAssembly 模板