2

因为我想在部署之前完全编译一个Azure 函数,并且因为我想在部署之前拥有重构(自动重命名)的所有好处,所以我想摆脱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.

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

函数.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目录下

任何想法 ?

4

2 回答 2

7

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

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

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

于 2017-02-13T19:26:28.503 回答
2

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

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

#r "DLLs\MyFunction.dll"

using System;

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

(在这个例子中,我使用了一个 eventHubTrigger)

于 2017-02-13T09:55:25.993 回答