使用.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未定义的错误。
所以我的问题具体是:
我知道this question回答了如何在web.config中获取变量,但不知怎的,我无法在那里设置变量。
编辑1:自从我被问到,这里是我得到缺少环境变量错误的地方 -
using Google.Cloud.Translation.V2;
TranslationClient client = TranslationClient.Create();
我无法申报TranslationClient。
答案 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文件内容):