web.config中的环境变量

时间:2017-05-17 10:55:36

标签: c# azure

使用.NET 4.5上的MVC框架在VS2017上使用webapp。在我的本地开发环境中,我使用web.config文件,如下所示:

<appSettings>
    <add key="GOOGLE_APPLICATION_CREDENTIALS" 
         value="C:\\Work\\Services-abcd.json" /> 
</appSettings>

但是当我运行webapp时,我仍然会收到GOOGLE_APPLICATION_CREDENTIALS未定义的错误。

所以我的问题具体是:

  1. 我哪里错了?我是否需要在其他地方定义它?
  2. 当我将其部署到临时/生产时,在我的天蓝网络服务上,我将如何共享json文件以及web.config文件需要如何更改呢?
  3. 我知道this question回答了如何在web.config中获取变量,但不知怎的,我无法在那里设置变量。

    编辑1:自从我被问到,这里是我得到缺少环境变量错误的地方 -

    using Google.Cloud.Translation.V2;
    
    TranslationClient client = TranslationClient.Create();
    

    我无法申报TranslationClient。

1 个答案:

答案 0 :(得分:3)

  

我哪里错了?我是否需要在其他地方定义它?

根据您的代码和说明,我发现您已经定义了应用设置而不是环境变量。注意:应用设置与环境变量不同。

如果您想在azure Web应用程序中设置环境变量,我建议您可以在Web应用程序代码中设置它并将应用程序上传到应用程序服务,如下所示:

   Environment.SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", Server.MapPath("test/test.txt"));
  

当我将其部署到临时/生产时,在我的azure Web服务上,我将如何共享json文件以及web.config文件将如何更改?

我建议您可以创建一个文件夹来存储您的Web应用程序中的json文件,然后您可以使用Server.MapPath来获取您的json文件的正确路径。

由于我没有google云应用凭据json文件,因此我在测试演示中添加了一个txt文件来测试代码是否可以正常运行。

有关我的测试演示的更多详细信息,您可以参考以下代码。

 protected void Page_Load(object sender, EventArgs e)
        {
            Environment.SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", Server.MapPath("test/test.txt"));
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
           string path =  Environment.GetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS");

            Response.Write(path + "\n");

            string[] lines = System.IO.File.ReadAllLines(path);

            foreach (string line in lines)
            {

                Response.Write(line);
            }

        }

结果(111是txt文件内容):

enter image description here