我已经检查了这个问题,并发现您的代码在本地方面可以正常工作,但在部署到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"));
你所经历的是默认行为。阐述通过Visual Studio创建的函数项目的结构。
以下文件是函数项目的一部分。这里的文件是由VS生成的实际代码文件或由用户创建的文件。
当我从1.0.38升级到Microsoft.NET.Sdk.Functions 3.0.11时,我开始遇到这个问题。将Microsoft.NET.Sdk.Functions降级到3.0.1帮助了我。
我发现了类似的问题,并且在构建函数应用程序时观察到另一个bin文件夹被创建,如下所示
这导致以下错误: System.Private.CoreLib: 无法加载文件或程序集'Microsoft.Azure.WebJobs.Extensions.Http, Version=3.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'。系统找不到指定的文件。 Microsoft.Azure.WebJobs.Extensions.Http.dll
它正在文件夹bin>deubug>net6.0>bin中查找文件,但文件存在于上层bin文件夹中。我知道这不是永久解决方案,作为解决方法,我手动将文件复制到其他位置。它解决了问题并且可以工作。 如果有人知道解决方案而不是手动复制,那将非常感谢。谢谢。
以下是我在函数应用中使用的参考文献:<PackageReference Include="Microsoft.ApplicationInsights.WorkerService" Version="2.21.0" /> <PackageReference Include="Microsoft.Azure.Functions.Extensions" Version="1.1.0" /> <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="4.1.3" /> <PackageReference Include="System.Data.SqlClient" Version="4.6.1" />