Azure Functions 在 bin 文件夹内创建另一个 bin 文件夹

6
我遇到了Azure函数看到在bin文件夹内创建了另一个bin文件夹的问题。因此,文件夹结构如下:bin -> net461 -> bin -> dll's。然而,项目中的任何其他文件(json、xml)都会被复制到bin -> net461中。由于这个原因,在代码中引用文件(json、xml)变得更加困难。我不需要另一个bin文件夹。如何解决这个问题?

你正在使用哪个版本的函数SDK?它是用于调试/发布定义的吗? - Thomas
请注意,这仍在发生在 Microsoft.NET.Sdk.Functions 4.1.1 上。 - cuongle
5个回答

2
我尝试像这样读取文件 File.ReadAllText(@"FolderName\FileName.json"),但是在函数执行时会出现错误 - Could not find a part of the path 'D:\Windows\system32\FolderName\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"));

此外,您可以关注这个 Github 问题 和这个 教程


1

你所经历的是默认行为。阐述通过Visual Studio创建的函数项目的结构。

以下文件是函数项目的一部分。这里的文件是由VS生成的实际代码文件或由用户创建的文件。

  • \FunctiaonAppName.sln
  • \FunctiaonAppName\FunctiaonAppName.csproj
  • \host.json
  • \localsetting.json
  • \Function.cs
以下文件是通过编译或构建函数项目生成的。这些文件应按照发布步骤部署到Azure中。
  • \bin\Debug\net461\Function\function.json
  • \bin\Debug\net461\bin\functionRelatedBinaries.dll
  • host.json
The build step(构建步骤)实际上获取了所有必需的二进制文件,以确保函数应用在Azure上成功运行,并将它们复制到内部bin文件夹中。内部bin文件夹还包含Function引用的所有外部二进制文件,例如Newtonsoft.Json。 net461的内容需要部署到Azure上,才能在云上运行。
你能帮我理解为什么使用这种结构会难以引用JSON / XML文件吗?在上述情况下,您可以简单地假设net461是项目输出的根目录,并且所有xml / json文件都在那里。

问题出在我部署函数应用到Azure时。我尝试读取文件,类似这样的方式:File.ReadAllText(@"FolderName\FileName.json"),但是当函数执行时,会出现错误 - 找不到路径的一部分 'D:\Windows\system32\FolderName\FileName.json'。如果我使用当前执行的程序集然后找到相对路径,也不起作用,因为文件位于bin -> net461 -> folderName -> File,而当前执行的程序集是bin -> net461 -> bin -> functionappName.dll。 - Yellow Panda

1

https://dev59.com/MnA75IYBdhLWcg3wZ4Nr - Matthew

1

当我从1.0.38升级到Microsoft.NET.Sdk.Functions 3.0.11时,我开始遇到这个问题。将Microsoft.NET.Sdk.Functions降级到3.0.1帮助了我。


这对我没用。 - Met-u

0

我发现了类似的问题,并且在构建函数应用程序时观察到另一个bin文件夹被创建,如下所示 enter image description here

这导致以下错误: 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" />


有没有解决方案? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接