.Net开源之corefx、coreclr初探(三)

本文介绍利用编译出来的coreclr来执行C#编写的Hello coreclr程序。我的机器环境是Win 7 x64 En,VS2013.

(1)编译test程序,根据开发guide,执行build指令如下:

<repo_root>\tests\buildtest.cmd x64 release clean

在我的环境中,编译成功了,没有出错误,开发guide中说明了如果出错误的解决办法。

同样编译完成后,会生成一个VS工程文件。为何要编译test,原因是我这边的Win7下,如果直接运行HelloCoreclr.exe程序的话,会提示找不到dll,而这些dll利用test编译后,

能够得到。

(2)设置环境变量CORE_ROOT

CORE_ROOT的路径指向<..\coreclr\binaries\Product\x64\debug>下

(3)编译helloworld程序

自己用C#写一个hello world程序,编译后生成exe文件,并将该文件拷贝粘贴到此路径下

<..\coreclr\binaries\Product\x64\debug>

(4)可以直接用命令好启动corerun.exe,运行helloworld程序。如下图为我创建的简单的hello
coreclr!程序,由corerun.exe启动后的执行结果。此时已经脱离的默认的.net运行库,而是用开源的coreclr运行库运行哦。

(5)api-ms-win-core-winrt-string-l1-1-0.dll找不到问题

实际上在第四步执行时,并不顺利,在win7下会出现dll找不到的错误,错误框如下。解决办法是将第一步中test编译出来的文件夹<..\coreclr\tests\src\packages\Microsoft.DotNet.CoreCLR.TestDependencies.1.0.0-prerelease\lib\aspnetcore50>

的dll全部拷贝一份到<..\coreclr\binaries\Product\x64\debug>下面,就ok了。这个错误很常见,github上很多人都遇到了这个错误。

(6)coreclr的debug

开发guide提供了如何对coreclr进行debug的方法,原文如下,主要需要做的就是将coreclr.sln工程中的INSTALL项目属性进行设置。根据说明,设置情况如图:

Debugging CoreCLR

  1. Perform a build of the repo.
  2. Open \binaries\Cmake\CoreCLR.sln in VS.
  3. Right click the INSTALL project and choose ‘Set as StartUp Project’
  4. Bring up the properties page for the INSTALL project
  5. Select Configuration Properties->Debugging from the left side tree control
  6. Set Command=$(SolutionDir)..\product\$(Platform)\$(Configuration)\corerun.exe
    1. This points to the folder where the built runtime binaries are present.
  7. Set Command Arguments=<managed app you wish to run> (e.g. HelloWorld.exe)
  8. Set Working Directory=$(SolutionDir)..\product\$(Platform)\$(Configuration)
    1. This points to the folder containing CoreCLR binaries.
  9. Press F11 to start debugging at wmain in corerun (or set a breakpoint in source and press F5 to run to it)
    1. As an example, set a breakpoint for the EEStartup function in ceemain.cpp to break into CoreCLR startup.

Steps 1-8 only need to be done once, and then (9) can be repeated whenever you want to start debugging. The above can be done with Visual Studio 2013.

按F11执行后,进入程序入口如下,然后就可以单步调试了,(PS:我这边环境变量没有设置也是单步调试的时候发现的,因为单步调试启动自己的Hello World程序时,会提示coreclr.dll加载失败,原因就是没有设置环境变量。)

综上,windows下以开源coreclr运行hello world程序就实现了。想了解coreclr底层的东西,单步跟着代码走就行了。

时间: 2024-12-27 23:50:56

.Net开源之corefx、coreclr初探(三)的相关文章

EF6.0+APS.NET MVC5.0项目初探三(code first实体映射到数据库)

到这里架构就搭建完了,该向里面填充东西的时候了,如上篇:EF6.0+APS.NET MVC5.0项目初探二(类库引用关系及说明) 第一步 :在需要添加EF的类库Domain.DbContext上右击->管理NuGet程序包->找到Entity FrameWork下载安装. 如图: 第二步:新建DbContext 第三步:在类库Domain.Entity上添加引用System.ComponentModel.DataAnnotations(用于验证的引用) 并新建实体类. 1 using Syst

.Net开源之corefx、coreclr初探

2014年底微软印度籍CEO宣布了.Net跨平台开源计划,没想到他们的动作还很快,corefx和coreclr的代码已经上传到github了,对于.Net程序员来说绝对是一个福音.读读这些代码绝对是提升水平的有效途径. Github上的项目如下所示: 我用sourcetree工具下载了代码到本地文件夹,如下所示: 1. corefr corefr的本地文件夹结构,已经有vs的solution文件,可以直接用VS打开了. System.Diagnositics.Process工程的显示如下,MS的

.Net开源之corefx、coreclr初探(二)

接上文,上周编译coreclr没有通过,我这边编译失败的主要原因是操作系统是x86的,而github上的开发guide,明确的要求windows平台下编译时支持的是x64,我换成了x64电脑进行编译就ok了,编译过程中持续的时间比较长,采用CMAKE进行编译时的画面如下: 大概10分钟左右,编译成功,显示画面如下: 全部完成后的输出结果如下: 编译完成后在生成的文件夹下,CMAKE文件夹下会有corefx的VS项目工程文件,可以用VS2013打开,如下图所示: 打开该工程文件,内容如下所示,整个

小白学爬虫:开源爬虫框架对比(三)

摘要:从零开始写爬虫,初学者的速成指南! 介绍 大家好!我们从今天开始学习开源爬虫框架Scrapy,如果你看过<手把手>系列的前两篇,那么今天的内容就非常容易理解了.细心的读者也许会有疑问,为什么不学出身名门的Apache顶级项目Nutch,或者人气飙升的国内大神开发的Pyspider等框架呢?原因很简单,我们来看一下主流爬虫框架在GitHub上的活跃度: ProjectLanguageStarWatchFork NutchJava1111195808 webmagicJava42166182

JavaScript初探三

<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> </head> <body> <ul id

Webgis开源解决方案之环境搭建(三)

前两篇文章介绍了开源GIS服务器Geoserver的安装以及开源数据库Postgres的安装,这篇文章介绍开源前端udig软件的安装,使用在后续篇幅中介绍 开源前端目前主流的是QGIS或者udig,网络上有其他文章,详细介绍QGIS的安装和使用,因平时习惯使用udig,本篇就以udig来介绍开源前端 软件下载地址:http://udig.refractions.net/ 本文以Udig2.0为主介绍 安装文件udig-2.0.0.RC1.win32.win32.x86_64.exe 运行安装文件

ASP.NET MVC 开源项目学习之ProDinner (三)

第四层:Resources   这一层里面主要是几个资源文件. 资源文件知识小杂烩: 几乎每一个生产性应用程序都需要使用资源.资源是在逻辑上由应用程序部署的任何非可执行数据.资源可以在应用程序中作为错误信息显示,或者作为用户 界面的一部分显示.资源可以包含多种形式的数据,包括字符串.图像和持久的对象.通过在资源文件中存储数据,无需重新编译整个应用程序即可更改数据.在.net中,有文本文件.resx 文件和 .resources 文件三种资源文件.如果资源将只包含字符串数据,则文本文件是最简单的选

JavaScript初探 三

<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> </head> <body> <input

前端开发之初探三

浏览器兼容 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Times; color: #000000 } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; text-indent: 14.2px; font: 12.0px "Songti SC"; color: #000000 } p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; text-indent: 14.2p