Home  >  Article  >  Backend Development  >  How .NET Core publishes executable files in the new project system (.csproj)

How .NET Core publishes executable files in the new project system (.csproj)

PHPz
PHPzOriginal
2017-04-23 16:28:242777browse

一、前言

  .NET工具链在最新的Preview3版本中,引入了新的MSBuild项目系统,项目文件又回归了.csproj的XML文件来管理,项目文件、包引用、程序集引用、.NET Core工具集、发布内容定义等内容。本文主要将主要讨论如何在新的项目系统中(.csproj)发布可执行文件。我们都知道在之前的版本中,项目文件是通过project.json文件来管理项目和包引用的,那么通过删除 dependencies->Microsoft.NETCore.App-> "type": "platform" 子节点,并定义runtimes节点,来发布可执行文件 。

  所为可执行文件就是在目标机器上,不需要安装.NET Core SDK或任何Runtime,就可以执行的文件。比如在Windows上可以生成 coreapp.exe的可执行文件,而在Linux中可以使用 ./coreapp 来执行。

  原理上这种可执行文件,就是通过一个C++应用程序为载体(宿主),加载CoreCLR,通过CoreCLR再加载任意的程序集,对这里有兴趣的朋友也可以到Github上去看一下CoreCLR中ClrHost的部分。

二、生成可执行

  在新的.csproj项目文件中,我们要想发布一个可执行文件,就在手动创建名为的节点,在这个节点下面,添加RuntimeIdentifiers也就是以前的RID定义,RID是描述系统平台的统一命名标示。例如我想要发布的可执行文件的目标系统平台为Win10Mac os 10.11.* 定义如下:


 <propertygroup>
      <runtimeidentifiers>win10-x64;osx.10.11-x64</runtimeidentifiers>
 </propertygroup>


  通过如下命令发布各平台的目标可执行文件:


dotnet build -r win10-x64
dotnet build -r osx.10.11-x64


  上面的命令可以生成带有符号文件和调试信息的DEBUG版本,你的应用程序将生成在.\bin\Debug\netcoreapp1.0\目录下,如果想生成生产环境的最终版本请通过如下命令获取:


dotnet publish -c release -r win10-x64
dotnet publish -c release -r osx.10.11-x64


  通过上述命令生成的Release版本目标执行文件将生成在 .\bin\release\netcoreapp1.0\目录下,并且每一个目标平台目录下都有生成的可执行文件、发布项目的程序集、.NET Core依赖或必要的文件来保证生成程序的独立可执行。

  我们来看一个新的csproj文件的完整定义:

How .NET Core publishes executable files in the new project system (.csproj)

<project>
  <import></import>
  <propertygroup>
    <outputtype>Exe</outputtype>
    <targetframework>netcoreapp1.0</targetframework>
    <versionprefix>1.0.0</versionprefix>
    <debugtype>Portable</debugtype>
    <runtimeidentifiers>win10-x64;osx.10.11-x64</runtimeidentifiers>
  </propertygroup>
  <itemgroup>
    <compile></compile>
    <embeddedresource></embeddedresource>
  </itemgroup>
  <itemgroup>
    <packagereference>
      <version>1.0.1</version>
    </packagereference>
    <packagereference>
      <version>9.0.1</version>
    </packagereference>
    <packagereference>
      <version>1.0.0-alpha-20161102-2</version>
      <privateassets>All</privateassets>
    </packagereference>
  </itemgroup>

  <import></import>
</project>

How .NET Core publishes executable files in the new project system (.csproj)

三、RID

  RID是Runtime Identifier的缩写,它用于定义目标操作系统标示。RID会不断的更新,我们可以在CoreFx项目中找到RID定义,常用的RID有如下:

  Windows RIDs

  • Windows 7 / Windows Server 2008 R2

    • win7-x64

    • win7-x86

  • Windows 8 / Windows Server 2012

    • win8-x64

    • win8-x86

    • win8-arm

  • Windows 8.1 / Windows Server 2012 R2

    • win81-x64

    • win81-x86

    • win81-arm

  • Windows 10 / Windows Server 2016

    • win10-x64

    • win10-x86

    • win10-arm

    • win10-arm64

  Linux RIDs

  • Red Hat Enterprise Linux

    • rhel.7.0-x64

    • rhel.7.1-x64

    • rhel.7.2-x64

  • Ubuntu

    • ubuntu.14.04-x64

    • ubuntu.14.10-x64

    • ubuntu.15.04-x64

    • ubuntu.15.10-x64

    • ubuntu.16.04-x64

    • ##ubuntu.16.10-x64

  • CentOS

    • ##centos.7-x64

    Debian
    • ##debian.8-x64
    • Fedora
    • fedora.23-x64
    • ##fedora.24-x64
    • OpenSUSE
  • ##opensuse.13.2-x64
    • ##opensuse .42.1-x64

    • ##Oracle Linux

    ##ol.7-x64
    • ol.7.0-x64

    • ##ol.7.1-x64
    • ol.7.2-x64
    • ##Currently supported Ubuntu derivatives
    • linuxmint.17-x64
  • linuxmint.17.1-x64
    • linuxmint.17.2-x64
    • ##linuxmint.17.3-x64

    • linuxmint. 18-x64

    • OS X RIDs
    • ##osx.10.10-x64

osx.10.11-x64

  • osx.10.12-x64

  • 4. System dependencies

  • The released target platform executable file also needs to rely on system features. Next, let’s take a look at the system. What are the required components:
  • Windows

##Ubuntu

CentOS
OS X ##Visual C++ Redistributable

for Visual Studio 2015

    libunwind8
  • libunwind8-dev
  • gettext
    libicu-dev
  • liblttng-ust-dev
  • libcurl4-openssl-dev
  • libssl-dev
  • uuid-dev
  • unzip
  • ##deltarpm
  • epel-release
  • unzip
libunwind
  • gettext
  • libcurl -devel
  • openssl-devel
  • zlib
  • libicu-devel
  • libssl version 1.0.1

  • ##

The above is the detailed content of How .NET Core publishes executable files in the new project system (.csproj). For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn