托管环境为何将其设置为生产,host.json与local.settings.json之间的区别

时间:2019-05-23 21:39:58

标签: azure-functions

关于.net核心应用程序的功能,我有两个问题。我正在使用blobtrigger。

1)当我在本地运行项目时,在命令提示符控制台上获得了这个“托管环境”,我想了解此变量集在哪里以及如何将其更改为开发。由于我只是在本地开发,因此会产生误导。

[5/23/2019 7:00:20 PM]主机启动(773毫秒) [5/23/2019 7:00:20 PM]工作主持人开始了 托管环境:生产 内容根路径:C:Myproject \ bin \ Debug \ netcoreapp2.1 现在收听:http://0.0.0.0:7071

2)host.json和local.settings.json有什么区别。什么时候可以使用host.json?到目前为止,我只使用过local.settings.json,当我发布到天蓝色时,我正在创建local.settings.json中提到的配置,但未使用Host.json的样子。 host.json文件的目的是什么。

3 个答案:

答案 0 :(得分:0)

  1. 您可以在local.settings.json中添加"ASPNETCORE_ENVIRONMENT": "Development",以更改托管环境:

enter image description here

  1. 您知道,local.settings.json仅用于本地测试,不会发布到Azure门户。对于host.json(将发布到azure),您可以在azure门户中配置诸如loglevel(如果要登录)的设置。有关更多详细信息,请参阅host.json的这篇文章。

答案 1 :(得分:0)

控制台上的“托管环境”来自环境变量ASPNETCORE_ENVIRONMENT。如果未设置此变量,则默认为“生产”。

在此处设置:HostingEnvironment.cs

github issue中描述了导致此默认值的原因。

此变量在dotnet核心Web应用程序中很流行,但是在Azure函数的官方文档中没有提及(我不确定为什么)。如果您编写一个for循环并将所有环境变量从一个函数中输出到控制台,则会发现默认情况下未设置此变量-既不在生产环境中运行,也不在Visual Studio中运行。

如果您希望在本地定义此变量,则有几种不同的方法。

通过命令行设置环境变量:

setx ASPNETCORE_ENVIRONMENT "Development"

在Properties \ launchSettings.json中定义:

  "commandName": "Project",
  "environmentVariables": {
    "ASPNETCORE_ENVIRONMENT": "Development"
  }

在local.settings.json中定义:

  "Values": {
    "ASPNETCORE_ENVIRONMENT": "Development"
  }

请注意,当您将应用程序发布为Azure时,此变量不会自动定义为正式版。您必须在Azure门户的“配置”->“应用程序设置”中定义此变量。

在azure函数中,似乎还有另一个类似的环境变量,称为AZURE_FUNCTIONS_ENVIRONMENT。默认情况下, 是在本地定义的。

AZURE_FUNCTIONS_ENVIRONMENT = Development

默认情况下,未在生产环境中定义它,可以在azure门户中定义。

host.json与local.settings.json之间的区别

host.json用于配置应用程序基础结构可以理解的预定义设置。它适用于本地和生产环境。但是,它不允许自定义设置。另一方面,local.settings.json对于定义自定义设置很有用。 host.json已提交到源代码管理中,但是local.settings.json通常不在源代码管理中,并且被视为存储秘密和连接字符串以供开发的好位置。

此处提供有关差异的更多详细信息:https://docs.microsoft.com/en-us/azure/azure-functions/functions-develop-vs#create-an-azure-functions-project(滚动至该部分的末尾)

host.json reference

local.settings.json reference

答案 2 :(得分:0)

有时,大多数时候,Microsoft做事的方式很奇怪...作为社区,我们必须要么找到解决方法,要么顺从。好吧,如果您是那些无法通过构想来遵循没有意义的东西的人之一,那么可以采取以下解决方案:

  1. 删除local.settings.json
  2. 创建两个文件(或多个文件,每个文件针对您的环境),并将其命名为{environment}.local.settings.json,例如:development.local.settings.jsonproduction.local.settings.json
  3. 创建任务以将当前环境文件复制到local.settings.json

再来一次:我们必须重复任务...

[
  {
    "label": "use development.local.settings.json",
    "command": "cp development.local.settings.json local.settings.json",
    "type": "shell",
    "options": {
      "cwd": "${workspaceFolder}/..."
    }
  },
  {
    "label": "use production.local.settings.json",
    "command": "cp production.local.settings.json local.settings.json",
    "type": "shell",
    "options": {
      "cwd": "${workspaceFolder}/..."
    }
  },
  {
    "label": "azure-func-development",
    "type": "func",
    "dependsOn": [
      "use development.local.settings.json",
      "build"
    ],
    "dependsOrder": "sequence",
    "options": {
      "cwd": "${workspaceFolder}/.../bin/Debug/netcoreapp2.2"
    },
    "command": "host start",
    "isBackground": true,
    "problemMatcher": "$func-watch"
  },
  {
    "label": "azure-func-production",
    "type": "func",
    "dependsOn": [
      "use production.local.settings.json",
      "build"
    ],
    "dependsOrder": "sequence",
    "options": {
      "cwd": "${workspaceFolder}/.../bin/Debug/netcoreapp2.2"
    },
    "command": "host start",
    "isBackground": true,
    "problemMatcher": "$func-watch"
  }
]

别累,我们还没有完成复制,但是...

允许重复launch.json配置:

[
  {
    "name": "[Development] Attach to Azure .NET Functions",
    "type": "coreclr",
    "request": "attach",
    "preLaunchTask": "azure-func-development",
    "processId": "${command:azureFunctions.pickProcess}"
  },
  {
    "name": "[Production] Attach to Azure .NET Functions",
    "type": "coreclr",
    "request": "attach",
    "preLaunchTask": "azure-func-production",
    "processId": "${command:azureFunctions.pickProcess}"
  }
]