Dll 中的 C# Azure 函数在 Azure 中不起作用(但在模拟器中)

C# Azure Function in Dll doesn't work in Azure (but in emulator)

因为我想要一个 Azure Function 在部署之前完全编译,并且因为我想拥有重构的所有 好处 (自动重命名) 在部署之前,我想摆脱 Csx 文件 并使用 Dll.

而且我希望我的所有代码都在 .Dll 中 - 完全编译。

因此它在本地模拟器中运行良好,但我无法在 Azure 中运行

我总是在日志文件中收到相同的错误消息:

MailSenderFunction: Unable to determine the primary function script.
Try renaming your entry point script to 'run' (or 'index' in the case of     Node),
or alternatively you can specify the name of the entry point script explicitly by adding a 'scriptFile' property to your function metadata.

而且我没有看到我的函数出现在门户的函数应用程序中。

function.json :

{
  "disabled": false,
  "scriptFile": "./bin/MailSenderFunctionLib.dll",
  "entryPoint": "MyCompany.MailSenderFunctionLib.MailSenderFunctionProcessor.RunCsxLess",
  "bindings": [
    {
      ...
    }
  ]
}

Dll代码 :

namespace MyCompany.MailSenderFunctionLib
{
  public class MailSenderFunctionProcessor
  {
    public static void RunCsxLess(Mail mail)
    {
      // ...
    }
}

dll在函数的bin目录下,不是App函数的bin目录下

有什么想法吗?

我不得不将 dll 放在与 function.json 相同的目录中,并从 scriptFile 中删除目录前缀。我无法让它在子目录中工作。

我能够让它在子目录中工作的解决方法是使用 run.csx 文件导入 .dll 并只执行该 dll 中的静态方法。如:

#r "DLLs\MyFunction.dll"

using System;

public static void Run(string myEventHubMessage, TraceWriter log)
{
    MyFunction.Program.Run(myEventHubMessage, log);
}

(在此示例中,我使用的是 eventHubTrigger)

这将在下一个运行时版本 (> 1.0.10690) 中得到完全支持。

您可以找到有关该增强功能的更多信息here

您在本地 运行 时观察到不同行为的原因是因为此时 CLI 预览(不幸的是)领先于托管环境并且使用了新的运行时位。我们正在更改流程,以确保这些版本彼此同步向前推进。