【问题标题】:How to reference Mono C# assemblies with GWAN C# servlets如何使用 GWAN C# servlet 引用 Mono C# 程序集
【发布时间】:2014-02-26 22:00:01
【问题描述】:

我试图在 gwan csp 文件夹中包含一个 c# servlet CompanyListService.cs 并收到编译错误“找不到类型或命名空间名称“PropertyManagement”。您是否缺少 using 指令或程序集引用?'

PropertyManagement.sql.dll 位于同一文件夹中。还尝试将其安装在 GAC 中,但没有运气。

如果使用'mcs CompanyListService.cs -r:PropertyManagement.Sql.dll',它会解析程序集

现有的 Hello.cs 和 Loan.cs 工作正常。任何帮助将不胜感激?

谢谢 拉姆

// C servlet example for the G-WAN Web Application Server 
// http://gwan.ch/
// hello.cs: G-WAN supports .NET C# servlets

using System;
using System.Collections.Generic;
//using PropertyManagement.Sql;
//using System.Runtime.Serialization.Json;
using System.Text;

public class CompanyListService
{
   public static int Main(string[] args)
   {
    PropertyManagement.Sql.CompanyRepository Repository = new PropertyManagement.Sql.CompanyRepository();
    List<PropertyManagement.Sql.Company> CompanyList = Repository.GetCompanyList();

    //string json = JsonSerializer<List<Company>>(CompanyList);

        Gwan.xbufCat(Gwan.getReply(args[0]), "test");
        return 200; // HTTP status (200:'OK')
   }
}

【问题讨论】:

    标签: dll mono g-wan


    【解决方案1】:

    官方文档没有提到它,但loading dynamically your assemblies 不仅是可能的,而且比traditional ways to do it 提供更多的灵活性。

    毕竟,这就是共享库的用途。感谢 C# 没有错过这一点。

    此外,G-WAN 在 /usr/lib/mono 路径下查找 Mono 库,并在 /gwan/.../libraries/cs 目录中查找用户定义的程序集(顺便说一下 G-WAN API)。

    【讨论】:

    • 感谢您的快速回复。我尝试将 dll 添加到 GAC 并尝试将 dll 复制到 /usr/lib/mono 和子文件夹,但仍然无法解析引用。我不确定使用反射或动态加载加载程序集时的性能。有什么建议可以让共享的 dll 与 gwan 一起工作吗?
    • 加载动态库要么由您手动完成,要么由 Mono 运行时完成 - 无论哪种方式,都将花费尽可能多的时间,并且您只能在第一次执行 servlet 时使用标志来完成。您是否尝试将 C# DLL 复制到专用的 /gwan/.../libraries/cs 目录?这就是 G-WAN 的 API 被定义并正确解析的地方。
    • 我已经把它放在 GAC、/cs、/usr/lib/mono 中 - 它无法解析,而 gwan_api 中的代码更改反映了
    • 在启动时使用其中一个 G-WAN 脚本,您可以在 G-WAN 内存空间中加载库,然后在 / 中导出的 G-WAN API C# 类中注册其功能gwan/.../libraries/cs 目录。然后,您的 servlet 将能够使用您编写的任何扩展 C 代码,无论是 G-WAN C API 函数 C# 包装器还是您自己的 C 函数。
    • 当你编译 servlet - 你使用什么 pkg-config?
    【解决方案2】:

    应其他 G-WAN + C# 用户 (Igor) 的要求,G-WAN v4.12.21 中添加了以下功能:

    • 创建 $MONO_PATH 以包含目录 /.../[gwan]/libraries/cs/dll

    • *.dll 文件位于 [gwan]/libraries/cs/dll 下 添加 -pkg:lib1,lib2...

    • 该行指定的任何库:

      // pragma link libname[,libname,...]

      ...在 *.cs 源代码文件中添加了“-pkg:”开关。

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多