在G-WAN中使用C#dll

时间:2018-09-06 07:20:28

标签: c# dll centos mono g-wan

我的目标是应用在G-WAN上运行并连接到Azure存储的创建脚本。为此,我首先尝试如何在G-WAN中将dll链接到C#脚本,但遇到此错误

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#servlet脚本如下

// 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;
    }
}

按照G-WAN FAQ中的说明,我已将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位(2016年2月8日16:33:28)
  • Mono JIT编译器版本3.0.2(2018年9月5日星期三Etar tarball)

下面是使用.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 :(得分:0)

一段时间以来,我们一直在使用G-WAN C#脚本(我们使用G-WAN的主要目标是C脚本),并且C#运行时可能已经以破坏事物的方式发展(Java,Objective-C,D,和其他语言一直导致这种向后兼容性问题。

在某些人看来,我认为这是“不可阻挡的进步之路”

John (以上)可能建议将G-WAN C#库的功能嵌入C#脚本中(或作为源代码嵌入G-WAN / libraries文件夹中)-除非您的库很大并且被数百个脚本使用,否则不要有任何惩罚(速度,内存)。

但是,如果您遇到此类运行时开销问题,那么我建议您使用更简单的运行时,例如ANSI C。这也将有利于可伸缩性。

答案 1 :(得分:0)

第一个问题:缺少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.

为解决此问题,我在/ usr / lib64 / pkgconfig中创建了TestGwanLibrary.pc,内容如下所示。

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 binary只在/ 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的库。

因此,对于G-WAN's FAQ中C#部分之后的用户,您需要如上所述在目录/ usr / lib64 / pkgconfig中为您的库创建一个打包文件(.pc)。