将C#dll与G-WAN一起使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将C#dll与G-WAN一起使用相关的知识,希望对你有一定的参考价值。

我的目标是应用在G-WAN上运行并连接到Azure存储的创建脚本。所以为了实现这一点,我首先尝试如何将dll链接到G-WAN中的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(tarball Wed Sep 5 03:46:28 EDT 2018)

下面是类库,使用.NET Standard 2.0使用System;

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

我不知道我应该如何处理这个错误。有人,请告诉我我缺少的东西!

答案

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

我想,在某些人的心目中,这是“不可阻挡的进步之旅”。

John(上图)可能提出的建议是将您的G-WAN C#库的功能嵌入到C#脚本中(或作为G-WAN / libraries文件夹中的源代码) - 除非您有任何问题(速度,内存)库是巨大的,并被数百个脚本使用。

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

另一答案

第一期:缺少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),如上所述。

以上是关于将C#dll与G-WAN一起使用的主要内容,如果未能解决你的问题,请参考以下文章

无法将FirebaseUI与片段一起使用

将 MediaInfo DLL 与 C# DLLImport 一起使用

csharp 与InstallUtil实用程序一起使用以使其执行某些任意代码的C#DLL示例

将片段与 GoogleMap 一起使用时应用程序崩溃

Android:将 savedInstanceState 与片段一起使用

C++/cli:无法转换参数 1