我创建了一个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"
}
}
}
}
运行azure函数时出现错误
2019-01-11T10:01:14.846 [错误] run.csx(5,27):错误CS0234:类型或名称空间名称'Description'在名称空间'System.ServiceModel'中不存在(是否丢失)组装参考?)
2019-01-11T10:01:15.108 [Error] run.csx(6,7):错误CS0246:找不到类型或名称空间名称'MongoDB'(您是否缺少using指令或程序集引用?)
我什至尝试添加如下所示的名称空间,但是没有运气
#r "Newtonsoft.Json"
#r "System.Xml"
#r "System.Xml.Linq"
#r "MongoDB"
答案 0 :(得分:1)
这可能是由于功能运行时的差异造成的。
project.json
用于〜1运行时的函数,其中代码以.NET Framework为目标,而您创建的函数在〜2运行时在.NET Core env上运行。当我们创建一个新的Function应用程序时,默认情况下,其运行时默认设置为〜2。
因此解决方案很简单,删除Function应用程序中的现有功能,并将Function运行时版本更改为〜1(在门户网站中找到,平台功能> Function app设置)。然后,您可以按照上述步骤重新创建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>