2017-08-16 86 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 –