我在使用DotNet类
的PHP脚本中引用ASP.NET
程序集
即。
$test = new DOTNET('assemblyname','classname');
运行此脚本时出现致命错误。
致命错误:
未捕获的异常'com_exception',消息'无法实例化 C:\ Program中的.Net对象[CreateInstance] [0x80131513]' Files \ xampplite \ htdocs \ xampp \ phptest.php:2堆栈跟踪:#0 C:\ Program 文件\ Xampplite文件\ htdocs中\ XAMPP \ phptest.php(2): dotnet-> dotnet('EncryptDecrypt,...','EncryptDecrypt ....')#1 {main} 抛出C:\ Program Files \ xampplite \ htdocs \ xampp \ phptest.php在线 2
对此有何帮助?
答案 0 :(得分:1)
我认为这种情况正在发生,因为您的图书馆在GAC中找不到,而且没有强名称或COMVisible。
为了使COMVisible可见,请确保AssemblyInfo.cs是这样的:
[assembly:ComVisible(true)]
对于强名称并将其安装在GAC中,我发现了这篇文章:
对于在GAC中注册的强名称NET程序集,您 可以只使用程序集名称,例如:$ x = new DOTNET(“myAssembly”, “MyClass的”);
对于未在GAC中注册的强名称NET程序集, 你需要使用完整的汇编字符串,例如$ x =新 DOTNET('myAssembly,Version = X.X.X.X,Culture = neutral, PublicKeyToken = ZZZZZZZZZZZZ','myClass');
您无法实例化尚未强名称的程序集。
“强名称”表示程序集具有公钥。强烈地 在Visual Studio中命名自己的类,转到中的“签名”选项卡 单击项目属性并单击“签署程序集”框并选择一个 密钥文件名。
要在GAC中注册程序集,可以使用各种工具 这样做,但最简单的方法是拖放已编译的 使用Windows资源管理器(shell)汇编到c:\ windows \ assembly 默认情况下安装扩展程序来处理已拖动的注册 文件)。