2017-08-16 84 views
3

我正在開發一個C#應用程序,我需要了解我是否在IIS下。我看到了關於使用HostingEnvironment.IsHosted方法的一些問題。不幸的是,如果我寫的東西,如:HostingEnvironment不包含IsHosted的定義

if (HostingEnvironment.IsHosted) 
{ 
    // on IIS 
} 
else 
{ 
    // not on IIS 
} 

我得到一個編譯錯誤:

HostingEnvironment does not contain a definition for IsHosted

我使用: Microsoft.AspNetCore.Hosting; Microsoft.AspNetCore.Hosting.Internal;

編輯

嘗試使用System.Web.Hosting.HostingEnvironment.IsHosted如建議,但沒有工作

enter image description here

+3

中包含代碼您正在混合框架版本。 System.Web不再使用在asp.net-core – Nkosi

+0

好的,我可以用什麼來代替? –

+0

檢查文檔https://docs.microsoft.com/en-us/aspnet/core/fundamentals/hosting?tabs=aspnetcore1x – Nkosi

回答

4

這可能有幫助。你可以取IHostingEnvironment這樣的:

var hostingEnvironment =(IHostingEnvironment)options.ApplicationServices.GetService(typeof(IHostingEnvironment)) 

if(hostingEnvironment.IsProduction()) 
{ 
    // do work 
} 

環境是在launchSettings.json設置。在您的啓動配置文件下:

"IIS Express": { 
    "commandName": "IISExpress", 
    "launchBrowser": true, 
    "launchUrl": "/api/values", 
    "environmentVariables": { 
    "ASPNETCORE_ENVIRONMENT": "Development" 
    } 
}, 

部署時默認值爲「生產」。

編輯:我實際上錯過了一部分。您需要在.UseKestrel(options => { /* environment code */ })

+0

謝謝,但我不太關注你..將代碼封裝在x中意味着什麼? –

+0

'var hostingEnvironment = ....''我發佈在你的新WebHostBuilder()。UseKestrel(options => {/ * here here * /});' –

+0

然後你可以使用你的if –