Использование C # dll с G-WAN - PullRequest
       19

Использование C # dll с G-WAN

0 голосов
/ 06 сентября 2018

Моя цель - применить сценарии создания, которые запускаются в G-WAN и подключаются к хранилищу Azure. Поэтому, чтобы добиться этого, я сначала пытаюсь связать dll со скриптом C # в G-WAN, и я столкнулся с этой ошибкой

Error: test.cs
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Package TestGwanLibrary was not found in the pkg-config search path.
Perhaps you should add the directory containing `TestGwanLibrary.pc'
to the PKG_CONFIG_PATH environment variable
No package 'TestGwanLibrary' found
error CS8027: Error running pkg-config. Check the above output.

1|// pragma link TestGwanLibrary
2|using System;
3|using System.Collections.Generic;
4|
5|public class Program
6|{
7|    public static int Main (string[] args)
8|    {


To run G-WAN, you must fix the error(s) or remove this Servlet



Error(s) in testdll.cs

Мой сценарий сервлета на C # выглядит следующим образом

// pragma link TestGwanLibrary
using System;
using System.Collections.Generic;

public class Program
{
    public static int Main (string[] args)
    {
        Console.WriteLine ("Running test.cs");
        TestGwanClass2.PrintToConsole2 ("ptc2 test");
        return 200;
    }
}

Следуя инструкциям в FAQ по G-WAN , я поместил GameCloudLibrary.dll в

root/gwan_linux64-bit/libraries/cs/dll

Однако при запуске gwan я получаю следующую ошибку. Я также попытался добавить MONO_PATH, который указывает на

/root/gwan_linux64-bit/libraries/cs/dll

но ошибка выше остается нерешенной.

Моя текущая настройка выглядит следующим образом

  • CentOS7.1804
  • G-WAN 7.12.6, 64-разрядная (8 февраля 2016 г., 16:33:28)
  • Mono JIT-компилятор версии 3.0.2 (tarball, среда, 5 сентября, 03:46:28 EDT 2018)

Ниже приведена библиотека классов с использованием .NET Standard 2.0. использование системы;

namespace TestGwanLibrary
{
    public class TestGwanClass
    {
        public static void PrintToConsole (string message)
        {
            Console.WriteLine ("PrintToConsole : " + message);
        }
    }
}

public class TestGwanClass2
{
    public static void PrintToConsole2 (string message)
    {
        Console.WriteLine ("PrintToConsole2 : " + message);
    }
}

Я не уверен, как мне поступить с этой ошибкой. Кто-нибудь, пожалуйста, посоветуйте мне, что мне не хватает!

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Первая проблема: отсутствует TestGwanLibrary.pc.

Package TestGwanLibrary was not found in the pkg-config search path.
Perhaps you should add the directory containing `TestGwanLibrary.pc'
to the PKG_CONFIG_PATH environment variable
No package 'TestGwanLibrary' found
error CS8027: Error running pkg-config. Check the above output.

Чтобы решить эту проблему, я создал TestGwanLibrary.pc в / usr / lib64 / pkgconfig и содержимое выглядит следующим образом.

Name: TestGwanLibrary
Description: Test dll for using C# in G-WAN
Version: 1.0.0.0
Libs: -r:/root/gwan_linux64-bit/libraries/cs/dll/TestGwanLibrary.dll

Я попытался поместить TestGwanLibrary.pc в / usr / lib / pkgconfig и / usr / share / pkgconfig, оба не работали, поэтому я предполагаю, что двоичный файл gwan ищет пакеты только в /usr/lib64/pkgconfig.

В TestGwanLibrary.pc Libs указывает, где хранится мой пользовательский файл .dll, а именно ../gwan/libraries/cs/dll/. Это местоположение не может быть изменено, так как я считаю, что в gwan есть какая-то настройка, которая ищет именно этот каталог.

Второй вопрос: сборка 'netstandard' не указана.

/root/gwan_linux64-bit/0.0.0.0:8080/#0.0.0.0
/csp/testdll.cs(12,24): error CS0012: The type `System.Object' is defined in an assembly that
is not referenced. Consider adding a reference to assembly `netstandard, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'
Compilation failed: 1 error(s), 0 warnings

Эта проблема связана с тем, что mono не поддерживает .NET Standard 2.0, и моя библиотека была построена с использованием этой среды. Чтобы решить эту проблему, я создал другую библиотеку, предназначенную для .NET Framework 4.6.1.

Так что для тех, кто придерживается раздела C # в FAQ G-WAN , вам нужно будет создать файл пакета (.pc) для вашей библиотеки в каталоге / usr / lib64 / pkgconfig, как упомянуто выше.

0 голосов
/ 07 сентября 2018

Уже давно мы использовали сценарии G-WAN C # (нашей главной целью в G-WAN были сценарии C), и среда выполнения C # могла развиваться таким образом, что портила вещи (Java, Objective-C, D, и другие языки постоянно вызывали проблемы обратной совместимости).

Я полагаю, что, по мнению некоторых, это "неудержимый марш прогресса" .

То, что Джон (выше), вероятно, предложил, это встроить функции вашей библиотеки G-WAN C # в скрипт C # (или как исходный код в папку G-WAN / библиотеки) - там будет нет пенни (скорость, память), если ваша библиотека не огромна и не используется сотнями скриптов.

Но если вы сталкиваетесь с такими проблемами во время выполнения, я бы предложил использовать более простую среду выполнения, такую ​​как ANSI C. Это также поможет масштабируемости.

...