Как решить проблемы с зависимостями csx файла C # script в Visual Studio Code? - PullRequest
1 голос
/ 23 сентября 2019

Я пытаюсь создать программу-функцию Azure с шаблоном триггера очереди служебной шины, используя файл csx.Но у меня проблемы с разрешением зависимостей.Если честно, меня очень смущает структура проекта, которая упоминается в [этом документе] (https://docs.microsoft.com/en-us/azure/azure-functions/functions-reference-csharp). Я пробовал два подхода.

Первый подход ... Создайте папку с именем MyAzureFuncв коде Visual Studio и вручную добавьте function.json, project.json, project.lock.json и run.csx. Затем, вне папки MyAzureFunc, я добавлю host.json и local.settings.json. Этот подходприводит к проблемам с зависимостями.

Folder Structure

Второй подход ... Создайте проект функции Azure с шаблоном очереди служебной шины в коде Visual Studio, который генерирует совершенно другойпапка и структура проекта. Затем я удалю большинство автоматически сгенерированных файлов и вручную добавлю в структуру, упомянутую в первом подходе. Это все еще приводит к проблемам с зависимостями.

Service Bus Queue Project Structure

Некоторые возможные причины, по которым я считаю, что это может происходить, следующие: 1. Версии фреймворка - мой project.json вызывает «net46», но когда я создаюФункция Azure в коде Visual Studio, использующая шаблон очереди служебной шины, реализует «netcoreapp2.1». 2. Необходимость запуска некоторой команды для распознавания зависимостей пакета. 3. Для работы с csx

I требуется некоторая конфигурация проекта.считаю, что важным файлом здесь является проект .json.Ниже приведен код ...

{
    "frameworks": {
      "net46":{
        "dependencies": {
          "MongoDB.Driver": "2.6.1",
          "MongoDB.Driver.Core": "2.6.1",
          "MongoDB.Bson": "2.6.1",
      "SharpZipLib": "0.86.0",
      "RabbitMQ.CLient": "5.0.1"
        }
      }
     }
  }

Ниже приведен код пакетов, которые я пытаюсь использовать в моем файле csx ...

#r "Newtonsoft.Json"
#r "Microsoft.ServiceBus"

using System;
using System.IO;
using System.Text;
using System.Threading.Tasks;
using Microsoft.ServiceBus.Messaging; --> ERROR
using Newtonsoft.Json; --> ERROR
using MongoDB.Driver; --> ERROR
using MongoDB.Bson; --> ERROR
using MongoDB.Bson.IO; --> ERROR
using RabbitMQ.Client; --> ERROR
using ICSharpCode.SharpZipLib.Zip.Compression.Streams; --> ERROR

Ответы [ 2 ]

0 голосов
/ 25 сентября 2019

Быстрая коррекция, когда я добавляю ..

#r "../bin/Microsoft.ServiceBus"

Я получаю следующее ...

[9/25/2019 8:16:27 PM] Loading functions metadata
[9/25/2019 8:16:27 PM] 1 functions loaded
[9/25/2019 8:16:28 PM] Compilation service error
[9/25/2019 8:16:28 PM] Function loader reset. Failed compilation result will not be cached.
[9/25/2019 8:16:28 PM] Generating 0 job function(s)
[9/25/2019 8:16:28 PM] No job functions found. Try making your job classes and methods public. If you're using binding extensions (e.g. Azure Storage, ServiceBus, Timers, etc.) make sure you've called the registration method for the extension(s) in your startup code (e.g. builder.AddAzureStorage(), builder.AddServiceBus(), builder.AddTimers(), etc.).
[9/25/2019 8:16:28 PM] Host initialized (1741ms)
[9/25/2019 8:16:28 PM] Host started (1776ms)
[9/25/2019 8:16:28 PM] Job host started
[9/25/2019 8:16:28 PM] The following 1 functions are in error:
[9/25/2019 8:16:28 PM] ModbusdataFunc: C# compilation service error: The given assembly name or codebase was invalid. (Exception from HRESULT: 0x80131047). The given assembly name or codebase was invalid. (Exception from HRESULT: 0x80131047).

Итак, как вы можете видеть.Добавление #r "../bin/Microsoft.ServiceBus" устраняет проблемы с зависимостями.НО СЕЙЧАС ОНА НЕ ПРИЗНАЕТ МОЕЙ ФУНКЦИИ!Как грустно.(

0 голосов
/ 25 сентября 2019

Так что я смог добиться некоторого прогресса в этом вопросе.

Вместо использования VS Code я создал проект с нуля в VS2017.Я решил создать проект функции Azure с триггером очереди служебной шины, предназначенным для .NET Framework 4.6.1.

Теперь в project.json устранены многие проблемы с зависимостями.

{
  "frameworks": {
    "net46": {
      "dependencies": {
        "MongoDB.Driver": "2.6.1",
        "MongoDB.Driver.Core": "2.6.1",
        "MongoDB.Bson": "2.6.1",
        "SharpZipLib": "0.86.0",
        "RabbitMQ.CLient": "5.0.1"
      }
    }
  }
}

Единственная проблема, с которой я сталкиваюсь сейчас, когда запускаю свой код, связана со ссылкой #r "Microsoft.ServiceBus".Я получаю следующие ошибки.

[9/25/2019 8:03:48 PM] run.csx(2,1): error CS0006: Metadata file 'Microsoft.ServiceBus' could not be found
[9/25/2019 8:03:48 PM] run.csx(8,17): error CS0234: The type or namespace name 'ServiceBus' does not exist in the namespace 'Microsoft' (are you missing an assembly reference?)
[9/25/2019 8:03:48 PM] run.csx(80,24): error CS0246: The type or namespace name 'BrokeredMessage' could not be found (are you missing a using directive or an assembly reference?)

Я знаю, что #r "Microsoft.ServiceBus" вызывает эту ошибку.Единственный подход, который показал некоторое обещание, - это ссылки, как показано ниже.

#r "../bin/Microsoft.ServiceBus"

Это приводит к тому, что «файл метаданных ... не найден» исчезает.Но все равно выкидывает другие ошибки.

...