C# Azure功能V2在开发团队中使用服务总线触发器

C# Azure功能V2在开发团队中使用服务总线触发器,c#,azure-functions,azureservicebus,C#,Azure Functions,Azureservicebus,我们有使用服务总线触发器创建的Azure函数(V2) [FunctionName("MyFunctionName")] public static async Task Run( [ServiceBusTrigger("%MyQueueName%", Connection = "ServiceBusConnectionString")] byte[] messageBytes, TraceWriter log) { // code to handle messag

我们有使用服务总线触发器创建的Azure函数(V2)

[FunctionName("MyFunctionName")]
public static async Task Run(
    [ServiceBusTrigger("%MyQueueName%", Connection = "ServiceBusConnectionString")]
    byte[] messageBytes,
    TraceWriter log)
{
    // code to handle message
}
队列名称在
local.settings.json
文件中定义:

{
    "Values": {
        ...
        "MyQueueName": "local-name-of-my-queue-in-azure",
        ...
    }
}
这在部署时非常有效,我们可以将环境变量设置为
dev queue name
live queue name
等,以适应我们所部署的各种环境

但是,当多个开发人员在本地连接时,如果
local.settings.json
文件处于源代码管理中,并且需要正确维护环境变量,则本地函数应用程序运行程序将全部连接到同一队列,至于哪个开发人员的应用程序将拾取和处理消息,这是随机的

我们需要的是每个开发人员都有自己的队列,但我们不希望必须从源代码管理中删除JSON配置文件,以便我们可以维护不同的文件(因为它包含需要更新的其他信息)


我们如何让运行我们的应用程序的每个开发人员/计算机都有一个唯一的队列名称(但已知,以便我们可以在云中创建服务总线队列)?

您可以通过环境变量覆盖设置值。指定为系统环境变量的设置优先于
local.Settings.json
文件中的值。只需定义一个名为
MyQueueName
的环境变量

话虽如此,我认为通常不建议将
local.settings.json
提交到源代码管理。我想您还将服务总线连接字符串存储在那里,这意味着您将秘密存储在源代码管理中

请注意,默认的
.gitignore
文件已将其列出


如果您在源代码管理中需要它,我将提交一个版本的
local.settings.json
,其中包含所有带有假值的变量,然后让每个开发人员在本地设置正确的值,然后忽略提交时的更改(set
假定未更改
).

Sage advice-我没有意识到在本地机器上设置环境变量会覆盖JSON文件中设置的内容。事实上,如果我猜测的话,我会假设相反的情况,但就我试图做的而言,它使用主机的值这一事实是完美的。