2012-10-11 38 views
3

我有三个php类我试图在我的.net应用程序中使用。我用Phalanger使用此命令采取这些三类,并作出.dll文件:Phalanger和php库.net

phpc /target:dll Client.php Crypt.php Exception.php 

这当然输出Client.dll以及一个Client.pdb文件。

从那里我去了VS2012,并创建了一个新的asp.net应用程序,并添加了Client.dll作为参考。不过,我没有看到任何的类和对象浏览器窗口的公共方法显示:

Client>Client>Base Types>Object (so that I only have the methods of type Object)

我已经试过this方法/教程,以得到它的工作涉及铸造一个自定义的界面到你的对象,但是我得到的错误:

the type or namespace name ScriptContext could not be found

这当然意味着它不知道什么或ScriptContext在哪里。然而,这个教程是从2007年开始的,所以我不知道它是否过时或者我应该从哪个类中获取?

我发现other tutorial是一样古老。它说:

If you want to use existing PHP source (developed for standard interpreter) without modifications you have to use legacy mode, but when you want to develop new PHP project you can consider using pure mode

但我不能找到文档中对传统模式的步骤,并且宁愿在尝试“纯”模式(让我没有改变/编辑我现有的PHP代码)。我尝试过(纯模式),但是它不会使用上面的命令编译(phalanger编译)(将DynamicObject.php类添加到命令中)。

我该如何到达php类中的公共方法?

回答

1
phpc /target:dll Client.php Crypt.php Exception.php 

在传统(标准)模式下创建DLL。这个DLL包含'怪异'名字空间,需要与PHP语义兼容。 (这些命名空间将代码与不同的脚本文件分开)。 .NET interoperability overview of Phalanger 3.0博客文章介绍了如何使用以标准模式编译的脚本。

命令行选项/pure+告诉编译器创建所谓的纯模式程序集。在这种模式下,编译器连接所有源文件,并将它们编译为一个(如C#),而没有任何奇怪的名称空间。如果您在PHP类声明上方指定了[\Export]属性,则生成的DLL将看起来像将从C#代码编译,您将能够引用它并正常使用它的类。

+0

如果您在visual studio中有一个phalanger项目,请转至属性,然后将Mode更改为Pure。 –

+0

伟大的链接谢谢!然而,我的部分问题是我无法找到类ScriptContext。该文件提到VS Express版本不支持,那么为什么我没有看到那个类? –

+1

PHP.Core.ScriptContext位于PhpNetCore.dll中... VS Express不支持第三方插件 - 这意味着您无法安装Phalanger Tools插件,该插件利用Phalanger/PHP项目和编辑器功能,但不会影响C#编辑器经验 –