. net实例化错误

本文关键字:错误 实例化 net | 更新日期: 2023-09-27 18:17:01

首先,很抱歉我多问了一个描述性的问题。

我正在实现我自己的汇编,而不是从GAC调用任何东西!我从Visual c# 2010 Express版中的类库项目开始。文件Class1.cs看起来非常简单,如下所示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Sample
{
    public class MyClass
    {
        public String generateCode(String s, Array a)
        {
            return "function " + s " + "(" + a + ") { return a['#handler']; }";
        }
    }
}

注意:将文件名更改为MyClass.cs或将类名更改为Class1甚至会抛出与下面描述的相同的异常。

AssemblyInfo.cs文件中包含如下实现行:

...
[assembly: AssemblyCulture("en")]
...
[assembly: ComVisible(true)]
...
[assembly: AssemblyVersion("2.3.5.2034")]
[assembly: AssemblyFileVersion("2.3.5.2034")]
[assembly: NeutralResourcesLanguageAttribute("en-IN")]

然后使用gacutil工具在GAC中注册它,并使用以下命令:

gacutil /f /i Sample.dll

注意:在我的场景中,参数-f-i在将此文件注册到GAC中没有效果。

因此,我提出了相同的。dll文件驻留在{ProjectFolder}'bin'Release'路径在%WINDIR%'Microsoft.NET'assembly'GAC_MSIL'Sample'v4.0_2.3.5.2034_en_d328b945b0050bbe'路径。

最后,当我在PHP中使用DOTNET类调用这个 时
$sample = new DOTNET("Sample, Version=2.3.5.2034, Culture=en, PublicKeyToken=d328b945b0050bbe", "Sample.MyClass");

抛出以下错误:

PHP Fatal error:  Uncaught exception 'com_exception' with message 'Failed to instantiate .Net object [CreateInstance] [0x80070002] The system cannot find the file specified.' in C:'Users'*******'Desktop'Sample.php:2
Stack trace:
#0 C:'Users'*******'Desktop'Sample.php(2): dotnet->dotnet('Sample, Ver...','Sample.MyClass')
#1 {main}
  thrown in C:'Users'*******'Desktop'Sample.php on line 2
如果我使用以下代码,在将主类移动到不同的命名空间namespace Sample.DotNet.myCompany;之后,它抛出了一个不同的错误:
$sample = new DOTNET("Sample, Version=2.3.5.2034, Culture=en, PublicKeyToken=d328b945b0050bbe", "Sample.DotNet.myCompany.MyClass");

这扔:

PHP Fatal error:  Uncaught exception 'com_exception' with message 'Failed to instantiate .Net object [CreateInstance] [0x80131522] ' in C:'Users'*******'Desktop'Sample.php:2

注意:

  • 我使用Vista Home Basic (SP 2), Visual c# 2010 Express edition, PHP 5.4.19, Apache 2.2 &2.4版本
  • 我在项目属性部分签名了这个文件,没有设置密码。
  • 我甚至包括了一个行。dotnet_runtime = "v4.0.30319"到我的php.ini

幸运的是,这似乎不是预期的PHP问题,因为我在项目属性部分将汇编目标框架从4.0更改为3.5客户端配置文件。然后它在%windir%'assembly'目录中明显可见,但未能产生任何令人满意的解决方案。

此外,如果我甚至将命名空间从命名空间Sample更改为

namespace Sample.DotNet.myCompany;

在主文件中,类反映为Sample.DotNet.myCompany.MyClass,并应用同样的事情,它没有做到我需要的。

结论:在我的情况下没有任何正确的解决方案!

问题:有什么办法解决这个问题吗?详细地说,我可以使用PHP 5.4.19中使用Visual c# 2010创建的特定.dll文件吗?

. net实例化错误

你能试着编译你的dll到x86而不是MSIL吗?

我会去启用融合日志,看看那里发生了什么,这样你就可以从哪里看到试图加载你的组装。

如何在。net中启用程序集绑定失败日志记录(Fusion)