使用 DOTNET 类将 C# 代码转换为 Php


Convert a C# code to Php using the DOTNET class

我正在尝试使用 DOTNET 将 C# 代码转换为 php,我

从不使用 C# 但使用了很多 php,所以,我从一个基本的东西开始,如果有用的话进行转换,然后有下一段 C# 代码。

using System.Text;
class AES
{
    private byte[] _key;
    private byte[] _iv;
    public AES()
    {
    }
    public AES(string keyBase, string iv)
    {
        _key = Encoding.ASCII.GetBytes(keyBase);
        _iv = Encoding.ASCII.GetBytes(iv);
    }
}

然后尝试只转换这一部分,所以我在 php 中做下一个

<?php
class Ejemplo{
    public function FunctionName($value = '')
    {
        echo "Hello world!...";
        //var_dump('System'Text'Encoding::GetEncoding());
        $stack = new DOTNET("mscorlib", "System.Text.Encoding");
        var_dump($stack);
   }
}
$eje = new Ejemplo();
$eje->FunctionName('nada');
?>

但在行"$stack = new DOTNET("mscorlib", "System.Text.Encoding");"

收到此错误"致命错误:未捕获的异常'com_exception',消息"无法实例化 .Net 对象 [创建实例] [0x80131513]",

然后寻找网络,我看到需要一个完整的字符串,其中包含版本和其他引用的dll内容,指的是"System.Text.Encoding",我的问题是如何知道dll的信息,可以创建这样的字符串

$csclass = new DOTNET("CSharpCOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=beb607ae770f5750", "CSharpCOM.CSharpCOMClass");

但对于我的

$stack = new DOTNET("mscorlib", "System.Text.Encoding");

或者,如果有人知道另一种方法可以做到这一点。谢谢大家

对于"mscorlib",不需要提供带有区域性和版本的完整程序集名称,因为这是包含最基本函数的 .NET 核心程序集之一,并且是 .NET 运行时的固定部分。

System.Text.Encoding 是一个抽象类。这就是为什么您无法创建它的实例的原因。在此示例中,您希望使用 System.Text.ASCIIEncoding。因此,直接创建该类的实例:

$encoding = new DOTNET("mscorlib", "System.Text.ASCIIEncoding"); 
$bytes = $encoding->GetBytes("Hello World");

应该注意的是,在"DOTNET"的帮助下使用PHP的.net程序集是有限的,因为它只允许您实例化类。不能使用静态类和枚举,这意味着无法访问某些 .net API。

您可以改用商业 NetPhp 库。

或者,使用要从 php 使用的专用窄接口用 C# 编写代码。

我相信定义.dll所需的所有信息都可以在.dll本身上找到。您是否费心查找您的mscorlib.dll并查看其文件详细信息?

您也许可以在文件夹{Drive}/Windows/assembly下找到它。您可能需要安装 Msoft 实用程序才能正确查看程序集。一旦您可以通过Msoft工具查看程序集,您就可以获取要使用的公钥令牌和版本

$stack = new DOTNET("mscorlib", "System.Text.Encoding");