.NET Core的生态圈随着开源社区的力量不断注入至其中,正在变得越来越强盛,并且不时得就出现些有意思的项目,比如Peachpie,它使得PHP的代码迁移到.NET Core项目变得可能。

从创建简单的入门程序开始可以更容易地体会其特性。

首先安装Peachpie的模板:

dotnet new -i Peachpie.Templates::*

接着创建项目:

dotnet new web -lang PHP -o helloPHP

然后切换目录至Server文件夹运行程序:

cd Server
dotnet run

最后通过浏览器访问http://localhost:5004/:

Peachpie的运行机制很简单,将PHP文件编译成.NET平台的dll文件,这样就可以如同普通的.NET代码库一般被其它程序调用。

它包含三个部分:

  • 编译器(peach.exe或者Peachpie.NET.Sdk),将PHP文件编译成.NET程序集
  • 运行时(Peachpie.Runtime.dll),提供程序运行时所需的功能
  • 代码库(Peachpie.Library.dll),包含PHP的函数,类及其它的实现

再回到开始的入门程序代码探究一番,可以发现关键点在于Website目录下的Website.msbuildproj文件中:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
<OutputType>Library</OutputType>
<TargetFramework>netstandard2.0</TargetFramework>
<AssemblyName>helloPHP</AssemblyName>
</PropertyGroup> <ItemGroup>
<Compile Include="**/*.php" />
</ItemGroup> <ItemGroup>
<DotNetCliToolReference Include="Peachpie.Compiler.Tools" Version="0.9.0-*" />
<PackageReference Include="Peachpie.NET.Sdk" Version="0.9.0-*" PrivateAssets="Build" />
</ItemGroup>
</Project>

在Peachpie.Compiler.Tools与Peachpie.NET.Sdk两者的作用下,包含index.php文件在内的所有PHP文件都最终会被编译成一个dll文件。

用使用这个dll文件也很简单,在Startup类的Configure方法里这样调用一下:

app.UsePhp(new PhpRequestOptions(scriptAssemblyName: "helloPHP"));

运行在ASP.NET中的PHP站点便诞生了。

Peachpie项目整体还在开发阶段,但不影响其已经能完成些惊人的工作,例如,其官方网站虽是构建在WordPress上,但已经被Peachpie编译成可以在ASP.NET中运行。仅凭以下的图你一定不会想到这个网站是PHP写成的:

在它的博客中可以看到关于此事的更详细信息。

如果你对PHP代码迁移到.NET平台这件事感兴趣的话,可以访问其在Github上的仓库,若是能为它添砖加瓦的话,那是再好不过了。

.NET Core开发日志——Peachpie的更多相关文章

  1. .NET Core开发日志——Entity Framework与PostgreSQL

    Entity Framework在.NET Core中被命名为Entity Framework Core.虽然一般会用于对SQL Server数据库进行数据操作,但其实它还支持其它数据库,这里就以Po ...

  2. .NET Core开发日志——RequestDelegate

    本文主要是对.NET Core开发日志--Middleware的补遗,但是会从看起来平平无奇的RequestDelegate开始叙述,所以以其作为标题,也是合情合理. RequestDelegate是 ...

  3. C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志

    C#实现多级子目录Zip压缩解压实例 参考 https://blog.csdn.net/lki_suidongdong/article/details/20942977 重点: 实现多级子目录的压缩, ...

  4. .NET Core开发日志——从搭建开发环境开始

    .NET Core自2016年推出1.0版本开始,到目前已是2.1版本,在其roadmap计划里明年更会推出3.0版本,发展不可不谓之迅捷.不少公司在经过一个谨慎的观望期后,也逐步开始将系统升级至最新 ...

  5. .NET Core开发日志——结构化日志

    在.NET生态圈中,最早被广泛使用的日志库可能是派生自Java世界里的Apache log4net.而其后来者,莫过于NLog.Nlog与log4net相比,有一项较显著的优势,它支持结构化日志. 结 ...

  6. .NET Core开发日志——Edge.js

    最近在项目中遇到这样的需求:要将旧有系统的一部分业务逻辑集成到新的自动化流程工具中.这套正在开发的自动化工具使用的是C#语言,而旧有系统的业务逻辑则是使用AngularJS在前端构建而成.所以最初的考 ...

  7. .NET Core开发日志——Linux版本的SQL Server

    SQL Server 2017版本已经可以在Linux系统上安装,但我在尝试.NET Core跨平台开发的时候使用的是Mac系统,所以这里记录了在Mac上安装SQL Server的过程. 最新的SQL ...

  8. .NET Core开发日志——Model Binding

    ASP.NET Core MVC中所提供的Model Binding功能简单但实用,其主要目的是将请求中包含的数据映射到action的方法参数中.这样就避免了开发者像在Web Forms时代那样需要从 ...

  9. .NET Core开发日志——简述路由

    有过ASP.NET或其它现代Web框架开发经历的开发者对路由这一名字应该不陌生.如果要用一句话解释什么是路由,可以这样形容:通过对URL的解析,指定相应的处理程序. 回忆下在Web Forms应用程序 ...

随机推荐

  1. MySql之视图的使用

    一:视图是什么 视图相当于一个窗口,一个基于具体数据库表.定义了相关查询规则 的窗口. 建立视图,可以重用一些复杂的查询语句.    建立视图,相当于定义了一系列查询操作:从视图查询数据,相当于在调用 ...

  2. 使用Jenkins搭建持续集成(CI)环境

    转自:http://www.cnitblog.com/luckydmz/archive/2012/01/03/77007.html 首先从官网http://jenkins-ci.org/下载 Java ...

  3. Google 发布的15个 Android 性能优化典范

    2015年伊始,Google发布了关于Android性能优化典范的专题,一共16个短视频,每个3-5分钟,帮助开发者创建更快更优秀的Android App.课程专题不仅仅介绍了Android系统中有关 ...

  4. java.lang.IllegalStateException——好头疼

    在我东,下下来一个项目总会出现启动不了的问题,这些问题往往在编译的时候发现不了,当你的服务器启动的时候,就是一片片的报错,有些问题可以通过异常的提示信息,判断出来哪里配置错了,但是也有些情况下,从异常 ...

  5. 全面理解Javascript闭包和闭包的几种写法及用途【转】

    一.什么是闭包和闭包的几种写法和用法 1.什么是闭包 闭包,官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.闭包的特点: 1. ...

  6. Flink source task 源码分析

    http://vinoyang.com/2016/05/05/flink-stream-source/ http://vinoyang.com/2016/12/28/flink-runtime-com ...

  7. mxnet:背景介绍

    学习的过程 使用mxnet作为教程的深度学习库,重点介绍高层抽象包gluon 双轨学习法,既教授大家从零实现,也教授大家使用gluon实现模型:前者为了理解深度学习的底层设计,后者将大家从繁琐的模型设 ...

  8. golang 命令行cobra妙用

    为什么使用命令行 大型项目中少不了数据升级,如果采用web服务,一来不够安全,二来数据量大的时候也会出超时的情况.这时使用命令行是比较合适的方式了. 命令行中的MVC web项目一般采用MVC模式,对 ...

  9. Pwnium CTF2014 – MatterOfCombination writeup

    这道题是虽然只有75分,但是做出来的队伍却很少,我们队伍也没有做出来,这次是看到了0xAWES0ME 的解题思路后才有了这篇文章.原文地址可以点击看这里,英文的. 题目就是一张图片: 在网上可以找到这 ...

  10. Debian root登录设置

    修改gdm3的登录pam文件 #vi /etc/pam.d/gdm3 将auth required pam_succeed_if.so user != root quiet_success注释掉 // ...