HostingEnvironment不包含IsHosted的定义。

5

我正在开发一个C#应用程序,需要判断当前是否运行在IIS下。我看到了一些Stack Overflow上使用HostingEnvironment.IsHosted方法的问题。但是如果我像下面这样写:

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

我遇到了编译错误:

HostingEnvironment不包含IsHosted的定义

我正在使用: Microsoft.AspNetCore.Hosting; Microsoft.AspNetCore.Hosting.Internal; 编辑 尝试使用System.Web.Hosting.HostingEnvironment.IsHosted,但并没有起作用。

3
您混淆了框架版本。System.Web 在 ASP.NET Core 中不再使用。 - Nkosi
好的,我可以使用什么替代品? - Gianluca Ghettini
我认为事情不是这样的。你是启动服务的人,所以你决定它是否使用IIS。 - Nkosi
1
我会选择一个命令行参数... - Gianluca Ghettini
那将是一个可行的解决方案。 - Nkosi
显示剩余3条评论
2个回答

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"
  }
},

当部署时,默认值为“Production”。

编辑:我实际上缺少一部分内容。您需要在.UseKestrel(options => { /* 环境代码 */ })中包含代码。


谢谢,但我不太明白你的意思。将代码包含在x中是什么意思? - Gianluca Ghettini
将我发布的 var hostingEnvironment = .... 放置在 new WebHostBuilder().UseKestrel(options => { /*place here*/ }); 内。 - Brandon
你可以使用你问题中的if块。 - Brandon

0

1
尝试使用System.Web.Hosting.HostingEnvironment.IsHosted,但是“Hosting”不存在。请查看我的编辑。 - Gianluca Ghettini

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接