• 技术文章 >后端开发 >C#.Net教程

    .NET Core如何在新的项目系统中(.csproj)发布可执行文件

    PHPzhongPHPzhong2017-04-23 16:28:24原创2105

    一、前言

      .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>的节点,在这个节点下面,添加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\< runtime_identifier>目录下,如果想生成生产环境的最终版本请通过如下命令获取:


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


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

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

    复制代码

    php入门到就业线上直播课:进入学习

    <Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" />
      <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 Include="**\*.cs" />
        <EmbeddedResource Include="**\*.resx" />
      </ItemGroup>
      <ItemGroup>
        <PackageReference Include="Microsoft.NETCore.App">
          <Version>1.0.1</Version>
        </PackageReference>
        <PackageReference Include="Newtonsoft.Json">
          <Version>9.0.1</Version>
        </PackageReference>
        <PackageReference Include="Microsoft.NET.Sdk">
          <Version>1.0.0-alpha-20161102-2</Version>
          <PrivateAssets>All</PrivateAssets>
        </PackageReference>
      </ItemGroup>
    
      <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
    </Project>

    复制代码

    php入门到就业线上直播课:进入学习

    三、RID

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

      Windows RIDs

      Linux RIDs

      OS X RIDs

    四、系统依赖

      发布出来的目标平台可执行文件,也是需要依赖系统特性的,接下来我们来看下系统的需要组件有哪些:

    WindowsUbuntuCentOS

    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



    以上就是.NET Core如何在新的项目系统中(.csproj)发布可执行文件的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    上一篇:ASP.NET MVC5请求处理管道和生命周期的详细教程 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• c语言中源文件编译后生成什么文件• c语言标识符有哪些类型• C#中GDI+编程10个基本技巧二• ASP.NET使用Ajax如何返回Json对象的方法具体介绍• 应用绝对路径与相对路径
    1/1

    PHP中文网