【问题标题】:Azure Functions creating another bin folder inside binAzure Functions 在 bin 内创建另一个 bin 文件夹
【发布时间】:2018-05-12 02:14:31
【问题描述】:

我遇到了 Azure 函数的问题,看到在 bin 中创建了另一个 bin 文件夹。所以文件夹结构是这样的 bin -> net461 -> bin -> dll 的。但是,项目中的任何其他文件(json,xml)都会被复制到 bin -> net461 。由于这种对文件(json,xml)的引用在代码中变得困难。我不需要另一个 bin 文件夹。如何解决这个问题?

【问题讨论】:

  • 您使用的是哪个版本的函数 sdk?是用于调试/发布定义吗?

标签: .net azure dll visual-studio-2017 azure-functions


【解决方案1】:

我尝试读取类似 File.ReadAllText(@"FolderName\FileName.json") 的文件,但是当函数执行时它给出错误 - 找不到路径的一部分 'D:\Windows\system32\FolderName \FileName.json'。

我检查了这个问题,发现您的代码可以在本地正确运行,但在部署到 azure 端后失败。您可能需要明确设置读取 json 文件的绝对路径。您可以利用 Microsoft.Azure.WebJobs.ExecutionContext.FunctionDirectory 来获取当前函数目录(例如,D:\home\site\wwwroot\<FunctionName> 用于 Azure 端,C:\Users\xxx\FunctionApps\bin\Debug\net461\&lt;FunctionName&gt; 用于本地端)。您可以关注Retrieving information about the currently running function的详细信息。

读取 json 文件的代码如下所示:

File.ReadAllText(Path.Combine(Directory.GetParent(executionContext.FunctionDirectory).FullName,@"helloworld.json"));

此外,你可以关注这个 github issue 和这个 tutorial

【讨论】:

    【解决方案2】:

    也许您的解决方法是将文件嵌入到 dll 中。

    Embed text file into dll

    然后从dll中读取内容。

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      您遇到的是默认行为。详细说明通过 Visual Studio 创建的函数项目的结构。

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

      • \FunctionAppName.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

      构建步骤实际上会获取函数应用在 azure 中成功运行所需的所有必要二进制文件,并将它们复制到内部 bin 文件夹中。内部 bin 文件夹还包含 Function 引用的所有外部二进制文件,例如牛顿软件.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
      猜你喜欢
      • 2020-05-13
      • 1970-01-01
      • 2018-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-26
      • 2019-05-24
      • 1970-01-01
      相关资源
      最近更新 更多