Ошибка CS0006: не удалось найти файл метаданных MongoDB.

Я создал 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"

person kudlatiger    schedule 11.01.2019    source источник


Ответы (1)


Вероятно, это вызвано разницей во времени выполнения функции.

project.json используется для функций в среде выполнения ~ 1, где код предназначен для .NET Framework, а функция, которую вы создаете, находится в среде выполнения ~ 2, которая выполняется в среде .NET Core env. Когда мы создаем новое приложение-функцию, его время выполнения по умолчанию теперь равно ~ 2.

Итак, решение простое: удалите существующие функции в приложении функции и измените версию среды выполнения функции на ~ 1 (найдите ее на портале, функции платформы> настройки приложения функции). Затем вы можете воссоздать триггер IoT Hub (Event Hub) с помощью шагов, описанных выше, на этот раз все должно работать.

Для работы с функцией 2.0 используйте function.proj для установки пакетов.

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFramework>netstandard2.0</TargetFramework>
    </PropertyGroup>
    <ItemGroup>
        <PackageReference Include="<packageName>" Version="<version>"/>
    </ItemGroup>
</Project>
person Jerry Liu    schedule 11.01.2019
comment
Поскольку среда выполнения ~ 2 является последней, я считаю, что ее лучше использовать. но где я могу найти документацию для достижения той же функциональности с использованием среды выполнения ~ 2? - person kudlatiger; 11.01.2019
comment
@kudlatiger См. мое обновление для установки пакетов во время выполнения ~ 2. - person Jerry Liu; 12.01.2019