我遇到Azure功能的问题,看到在bin中创建了另一个bin文件夹。所以文件夹结构就像这个bin - > net461 - > bin - > dll的。但是项目中的任何其他文件(json,xml)都会被复制到bin - > net461。由于这种对文件的引用(json,xml)在代码中变得很困难。我不需要另一个bin文件夹。如何解决这个问题?
答案 0 :(得分:1)
我尝试读取类似File.ReadAllText(@" FolderName \ FileName.json")的文件,但是当函数执行时会出错 - 无法找到路径的一部分' d:\ Windows \ System32下\文件夹\ FileName.json'
。
我已经检查了这个问题,发现你的代码可以在本地端正常工作但在部署到azure端后失败了。您可能需要显式设置绝对路径以读取您的json文件。您可以利用 Microsoft.Azure.WebJobs.ExecutionContext.FunctionDirectory 来获取当前的功能目录(例如,对于Azure端D:\home\site\wwwroot\<FunctionName>
,对于本地端C:\Users\xxx\FunctionApps\bin\Debug\net461\<FunctionName>
。您可以关注的详细信息Retrieving information about the currently running function。
读取json文件的代码如下所示:
File.ReadAllText(Path.Combine(Directory.GetParent(executionContext.FunctionDirectory).FullName,@"helloworld.json"));
答案 1 :(得分:1)
当我从 1.0.38 升级到 Microsoft.NET.Sdk.Functions 3.0.11 时,我开始遇到这个问题。它帮助我将 Microsoft.NET.Sdk.Functions 降级到 3.0.1。
答案 2 :(得分:0)
您遇到的是默认行为。详细说明通过Visual Studio创建的函数项目的结构。
以下文件是函数项目的一部分。这里的文件是VS生成的实际代码文件,或者由用户创建。
通过编译或构建函数项目生成以下文件。此处的文件将按照发布步骤部署到Azure。
构建步骤实际上获取了功能应用程序在azure中成功运行所需的所有必需二进制文件,并将它们复制到内部bin文件夹。内部bin文件夹还包含按功能引用的所有外部二进制文件,例如Newtonsoft.Json。 net461的内容需要部署到azure才能在云上运行。
您能否帮我理解如何使用此结构引用JSON / XML文件变得困难。在上面的例子中,你可以简单地假设net461是项目输出的根,所有的xml / json文件都会出现在那里。
答案 3 :(得分:0)