Ubuntu系统下的第一个console程序

进入自己喜欢的目录,前面步骤和windows基本一致,只简单描述下

执行 dotnet new

4f0ccf113d5e4880a916e9512204bc46

然后执行 dotnet restore

58e4cf8bb64f434795d2c4b0b1c9902c

然后执行 dotnet run

0cd47137c039497886ce3474a12df347

第一次未编译,会自动编译,然后可以看到程序已经成功执行了。

编译后会生成bin的目录,具体内容如下

b6a4836c8cae44d6983f9e0de97e3fb7

可以看到在bin/Debug/dnxcore50/ubuntu.14.04-x64目录下生成可执行的helloworld文件,可以直接执行

9593dbc026574750891abd9cdd15cfcb

是不是帅呆了,比以前mono来的给力多了吧。不过精彩的还在后面。

手动编译

先删除刚才编译好的bin目录 rm -rf bin

执行命令 dotnet build --native 或者 简写的 dotnet build -n

e6c29a554f464cb48d052d5220456930

然后看看都输出了什么内容

ll -R bin

23440fb4fcc54532bc1c86edd81289f6

注意到没有,在bin/Debug/dnxcore50/ubuntu.14.04-x64/下多了一个native的目录,里面只有一个helloworld的文件。

dotnet编译成了linux的native文件,不需要安装dotnet环境就可以执行。(没仔细研究,应该是将所需的环境都编译到了此文件中,可以看到一句hello world的文件大小就1M多了)

测试中将此文件copy到了另一个刚装好的centos7上,运行正常。

 

后续补充:
编译为linux的native以后,main方法的args参数会收到运行的命令
上例中用dotnet run运行时,args不会收到参数
在bin/Debug/dnxcore50/ubuntu.14.04-x64目录运行 ./helloworld,args也不会收到参数
但是到bin/Debug/dnxcore50/ubuntu.14.04-x64/native目录下运行 ./helloworld,args会收到参数
args[0]="./helloworld"
不知道这是不是个bug,以后会不会解决
 
这个问题发现的比较偶然,因为去玩了下core的sample,DotnetBot才发现的。
 
参考文档:
posted @ 2016-03-17 09:27  draweye  阅读(1122)  评论(0编辑  收藏  举报