簡體   English   中英

ASP.Net Core應用程序可在Visual Studio中運行,但不能與dotnet運行

[英]ASP.Net Core app works in visual studio but not with dotnet run

我有一個asp.net核心應用程序,該應用程序是通過Visual Studio開始構建的,通常在按F5或按Visual Studio中的調試按鈕時,它可以正常工作。

但是,如果我嘗試使用dotnet run ,它仍然可以工作並開始在默認端口5000上偵聽(我假設這是紅k偵聽)。 在此處輸入圖片說明

但是,如果嘗試使用http:// localhost:5000通過任何瀏覽器訪問該頁面,則會收到錯誤消息,提示無法連接。 我了解如果我是從Visual Studio運行的,它將自動將我的應用程序置於IIS后面,但是我不明白為什么如果該應用程序是自托管的,為什么它不起作用。

我想將我的項目移至linux環境,這似乎是現在唯一阻止我的事情。 我已經測試過通過cli創建新的dotnet應用程序,並且如果我嘗試通過瀏覽器進行訪問,這些應用程序也可以正常工作,看來我在VS中創建的特定應用程序無法正常工作。

我的dotnet --version返回1.0.4

編輯(詳細答案)

因此,為了補充下面的Sanket回答,我還弄清楚了只有將ASPNETCORE_ENVIRONMENT設置為Development 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;
        }

現在,我的應用程序可以在任何環境下運行。

發生錯誤,因為ASPNETCORE_ENVIRONMENT變量的值不同。 如果是Visual Studio,則將其設置為Development ;如果是dotnet cli,則將其設置為Production

要使用命令行設置ASPNETCORE_ENVIRONMENT變量,請使用以下命令-

setx ASPNETCORE_ENVIRONMENT "Development"

有關如何設置托管環境的更多信息,請參閱本文

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM