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

Convert a C# code to Php using the DOTNET class

我正在尝试使用 DOTNET 将 C# 代码转换为 php,我从不使用 C#,但使用了很多 php,所以,我从基本的东西开始,为了 se如果有用做转换,然后有下一段 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");”

收到此错误 "Fatal error: Uncaught exception 'com_exception' with message 'Failed to instantiate .Net object [CreateInstance] [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 的固定部分.net 运行时。

System.Text.Encoding 是一个摘要 class。这就是为什么您不能创建它的实例的原因。在示例中,您要使用 System.Text.ASCIIEncoding。因此,直接创建 class 的实例:

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

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

您可以改用商业 NetPhp 库。

或者,使用要从 php 使用的特定窄接口在 C# 中编写代码。

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

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

中使用的版本
$stack = new DOTNET("mscorlib", "System.Text.Encoding");