1

我创建了一个Azure Function,它在“run.csx”中有以下代码

using System;
using System.Runtime.Serialization;
using System.ServiceModel.Description;
using MongoDB.Bson.IO;
using MongoDB.Bson;
using MongoDB;
using MongoDB.Driver;
using System.Security.Authentication;
using System.Text;
using Newtonsoft.Json;

public static void Run(string myIoTHubMessage, ILogger log)
{
    log.LogInformation($"C# IoT Hub trigger function processed a message: {myIoTHubMessage}");
 }

我有Project.json如下

  {
    "frameworks": {
    "net46":{
    "dependencies": {
      "Newtonsoft.Json": "10.0.3",
      "System.ServiceModel.Primitives":"4.4.0",
      "MongoDB.Bson": "2.4.0",
      "MongoDB.Driver": "2.4.0",
      "MongoDB.Driver.Core": "2.4.0"
    }
  }
 }
}

运行天蓝色功能时出现以下错误

2019-01-11T10:01:14.846 [错误] run.csx(5,27):错误 CS0234:命名空间“System.ServiceModel”中不存在类型或命名空间名称“描述”(您是否缺少程序集引用?)

2019-01-11T10:01:15.108 [错误] run.csx(6,7):错误 CS0246:找不到类型或命名空间名称“MongoDB”(您是否缺少 using 指令或程序集引用?)

我什至尝试添加如下命名空间但没有运气

#r "Newtonsoft.Json"
#r "System.Xml"
#r "System.Xml.Linq" 
#r "MongoDB"
4

1 回答 1

1

这可能是由于 Function 运行时的差异造成的。

project.json用于 ~1 运行时上的函数,其中代码以 .NET Framework 为目标,而您创建的函数位于 ~2 运行时上,该运行时在 .NET Core env 上运行。当我们创建一个新的函数应用程序时,它的运行时间现在默认设置为 ~2。

所以解决方案很简单,删除 Function app 中的现有函数并将 Function runtime 版本更改为 ~1(在门户中找到它,Platform features>Function app settings)。然后,您可以使用上述步骤重新创建 IoT 中心(事件中心)触发器,这一次应该可以正常工作。

要使用 Function 2.0,请使用function.proj安装包。

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFramework>netstandard2.0</TargetFramework>
    </PropertyGroup>
    <ItemGroup>
        <PackageReference Include="<packageName>" Version="<version>"/>
    </ItemGroup>
</Project>
于 2019-01-11T13:59:28.813 回答