我的目标是应用在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
但上述错误仍未解决。
我当前的设置如下
下面是使用.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);
}
}
我不确定如何处理此错误。有人,请就我所缺少的内容向我提出建议!
答案 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)。