• 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才发现的。
     
    参考文档:
  • 相关阅读:
    ThreadPoolExecutor的corePoolSize、maximumPoolSize和poolSize
    ThreadPoolExecutor线程池的一个面试题
    SpringBoot 集成Jedis操作set
    死磕JVM之类中各部分的加载顺序
    ThreadLocal为什么会内存泄漏
    有趣的RPC理解
    MQ如何解决消息的顺序性
    Collections.sort排序
    对象的内存分析
    类与对象的分析
  • 原文地址:https://www.cnblogs.com/draweye/p/5286099.html
Copyright © 2020-2023  润新知