![](/img/trans.png)
[英]ASP.NET Core app in Visual Studio Codespaces debugging issue
[英]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.