一、前言

  .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.* 定义如下:

        
  1. <PropertyGroup>

  2. <RuntimeIdentifiers>win10-x64;osx.10.11-x64</RuntimeIdentifiers>

  3. </PropertyGroup>

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

        
  1. dotnet build -r win10-x64

  2. dotnet build -r osx.10.11-x64

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

        
  1. dotnet publish -c release -r win10-x64

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

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

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

        
  1. <Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  2. <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" />

  3. <PropertyGroup>

  4. <OutputType>Exe</OutputType>

  5. <TargetFramework>netcoreapp1.0</TargetFramework>

  6. <VersionPrefix>1.0.0</VersionPrefix>

  7. <DebugType>Portable</DebugType>

  8. <RuntimeIdentifiers>win10-x64;osx.10.11-x64</RuntimeIdentifiers>

  9. </PropertyGroup>

  10. <ItemGroup>

  11. <Compile Include="**\*.cs" />

  12. <EmbeddedResource Include="**\*.resx" />

  13. </ItemGroup>

  14. <ItemGroup>

  15. <PackageReference Include="Microsoft.NETCore.App">

  16. <Version>1.0.1</Version>

  17. </PackageReference>

  18. <PackageReference Include="Newtonsoft.Json">

  19. <Version>9.0.1</Version>

  20. </PackageReference>

  21. <PackageReference Include="Microsoft.NET.Sdk">

  22. <Version>1.0.0-alpha-20161102-2</Version>

  23. <PrivateAssets>All</PrivateAssets>

  24. </PackageReference>

  25. </ItemGroup>

  26. <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

  27. </Project>

三、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

四、系统依赖

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

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

原文地址:http://www.cnblogs.com/maxzhang1985/p/6136886.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

.NET Core New csproj 如何发布可执行文件相关推荐

  1. .NET Core 和 .NET Framework 启动可执行文件的差别

    在 Windows 下,使用 .NET Framework 构建出来的应用,可以只有一个可执行文件,在可执行文件里面包含了 IL 代码.使用 .NET Core 构建出来的应用,将会包含一个 Exe ...

  2. dotnet core 和 dotnet Framework 启动可执行文件的差别

    在 Windows 下,使用 .NET Framework 构建出来的应用,可以只有一个可执行文件,在可执行文件里面包含了 IL 代码.使用 .NET Core 构建出来的应用,将会包含一个 Exe ...

  3. .NET Core 3 Preview 2发布,C#8更强大的模式匹配

    .NET Core 3 Preview 2 发布了,此版本主要带来了 C# 8 相关的新功能,C# 8 Preview 2 是 .NET Core 3 SDK 的一部分. C# 8 中使用模式进行更多 ...

  4. 边缘化搭建 DotNet Core 2.1 自动化发布和部署(下)

    写在前面 本篇文章是上一篇边缘化搭建 DotNet Core 2.1 自动化发布和部署(上)的后续操作,本文主要讲解如何开启Docker Remote API,开启Remote API后的权限安全问题 ...

  5. .net core 使用Redis的发布订阅

    Redis是一个性能非常强劲的内存数据库,它一般是作为缓存来使用,但是他不仅仅可以用来作为缓存,比如著名的分布式框架dubbo就可以用Redis来做服务注册中心.接下来介绍一下.net core 使用 ...

  6. .NET跨平台之旅:博问站点迁移至ASP.NET Core on Linux并发布上线

    Powered by ASP.NET Core on Linux! 我们全站的 .NET Core 迁移工作如火如荼,这是我们今年上半年的重要工作. 今天我们终于完成了博问产品(q.cnblogs.c ...

  7. Ubuntu GitLab CI Docker ASP.NET Core 2.0 自动化发布和部署(1)

    相关博文: Ubuntu 简单安装和配置 GitLab Ubuntu 简单安装 Docker Ubuntu Docker 简单安装 GitLab Ubuntu Docker 安装和配置 GitLab ...

  8. .NET Core 3 Preview 2 发布,C# 8 更强大的模式匹配

    .NET Core 3 Preview 2 发布了,此版本主要带来了 C# 8 相关的新功能,C# 8 Preview 2 是 .NET Core 3 SDK 的一部分. C# 8 中使用模式进行更多 ...

  9. 干翻Java_干翻Java!微软跨平台.NET Core 2.0版发布

    跨平台 .NET Core 2.0 版发布" /> 下载 Visual Studio 2017 version 15.3 下载 .NET Core 2.0 下载 Visual Stud ...

最新文章

  1. Android中实现整个视图切换的左右滑动效果
  2. 《软件测试实践--测试Web MSN》 之我的学习笔记(一)
  3. 单片机控制24v电压_最全变频器控制端子接线方法和技巧
  4. pythonweb毕业设计-[分享]我发现了一个快速完成物联网毕业设计的好方法!
  5. 关于JavaScript中的同步(SYNC)和异步(ASYNC)
  6. python 面向对象实现CNN(四)
  7. mysql -- 索引的使用
  8. CentOS 7 使用 ACL 设置文件权限
  9. 沉淀再出发:Spring的架构理解
  10. CentOS和Ubuntu区别
  11. PTA 7-2 深入虎穴 (30 分)
  12. 记录一次 JS 解密去混淆的经历 -- 如何破解加密的 JS 代码(一)
  13. Java版战棋(SLG)游戏AI及寻径处理入门
  14. 指数函数误差平方和matlab,数值分析与实验数学081 张燃 3080801119).doc
  15. 速写在网站建设中的重要地位
  16. WEB前端期末大作业——关于酒店主题网站设计——高级酒店公寓网页(4页)
  17. 【Python】python 程序示例
  18. oracle grant execute function,oracle grant 详解
  19. 38条搞笑WOW下线理由。。。 达人火速添加啊
  20. 程序员,不要让自己做兔子(updated) 网上最近流传的一个笑话,关于兔子,狼还有一只老虎的,故事 我就是想打你了,还需要什么理由吗?谁让你是兔子 项目经理是这样当的...

热门文章

  1. 【Mongodb】用户和认证 权限总结
  2. C语言数据结构----递归的应用(斐波拉契数列、汉诺塔、strlen的递归算法)
  3. Exchange Server2010系列之十一:部署CAS+HT角色高可用性
  4. 重要更新,Office Add-in将全面支持Webview2
  5. 关于 Azure SQL 数据库你不知道的 5 件事
  6. dotnet 基于 dotnet format 的 GitHub Action 自动代码格式化机器人
  7. 运维管理工具-- Deploy Assistant
  8. 面向.NET开发人员的Dapr——机密
  9. Windows 程序包管理器 1.0 正式发布
  10. 为什么选择ASP.NET Core