【问题标题】:Read values from local.setting.json while debugging test调试测试时从 local.setting.json 读取值
【发布时间】:2018-01-17 18:37:56
【问题描述】:

在运行或调试测试时,我似乎无法在 azure 函数中从该文件中读取任何内容,但是在本地调试整个应用程序时它工作正常.. 任何人都可以解释为什么吗?

{
  "IsEncrypted": false,
  "Values": {
    "xyz": 123
  }
}

var res = ConfigurationManager.AppSettings.Get("xyz");

ty..

我怀疑是因为“调试”是从另一个项目(测试项目)启动的,而 local.settings.json 没有与正在测试的项目捆绑在一起?

【问题讨论】:

    标签: c# json azure azure-functions


    【解决方案1】:

    我以编程方式添加了设置,以减少敏感数据到达版本控制的机会。

    class LocalSettings
    {
        public bool IsEncrypted { get; set; }
        public Dictionary<string, string> Values { get; set; }
    }
    
    public static void SetupEnvironment()
    {
        string basePath = Path.GetFullPath(@"..\..\..\MyAzureFunc");
        var settings = JsonConvert.DeserializeObject<LocalSettings>(
            File.ReadAllText(basePath + "\\local.settings.json"));
    
        foreach (var setting in settings.Values)
        {
            Environment.SetEnvironmentVariable(setting.Key, setting.Value);
        }
    }
    

    【讨论】:

    • 这很棒 - 可能有一个内置的 GUI 方法可以做到这一点,但至少对我来说效果更好
    • 那段代码虽然简单得离谱,但 FRCKEN 太棒了!
    • 这确实非常适合本地机器运行测试 - 但是在 CI/CD 的构建服务器部分进行这项工作的方法是什么? local.settings.json 甚至不会被检查到源代码管理中,并且可能包含秘密。功能应用程序在应用程序设置配置中有它的设置,可能包括从 KeyVault 中提取的一些秘密)。有什么想法吗?
    • @MarkZ。是的,这就是这里的优雅部分,一旦将设置编组到环境变量中,那么所有代码​​都可以按原样工作......所以你只需要一个可以在本地运行的 EnvironmentSetup 接口(这个实现)和一个不同的实现读取从 CI/CD 管道存储...它可能会向 Azure Key Vault 大喊大叫,或者只是 Blob 存储中的受保护文件等与本地文件相比。
    • @CajunCoding 最终从 KeyVault 设置了 env 变量,但问题是名称没有 100% 排列,所以它更像是手动映射(从 keyvault 机密名称到 env var 名称)很不幸,但对我们的设置来说是独一无二的
    【解决方案2】:

    你的怀疑是正确的。只有 Azure Functions 运行时主机真正知道从该文件中读取设置并将它们合并到整体 AppSettings 中。在测试项目中运行时,不涉及 Azure Functions 运行时主机,因此您无法访问它们。

    解决此问题的最简单方法是将所有相同的设置键/值反映到您的测试项目的app.config 文件的标准&lt;appSettings&gt; 部分下。

    【讨论】:

    • 太好了,我添加了一个 app.config,并从 app.debug.config 应用了转换,效果很好 - 谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多