.NET Core New csproj 如何发布可执行文件
来源:互联网 发布:图文识别软件 知乎 编辑:程序博客网 时间:2024/05/16 11:31
一、前言
.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是描述系统平台的统一命名标示。例如我想要发布的可执行文件的目标系统平台为Win10和Mac os 10.11.* 定义如下:
通过如下命令发布各平台的目标可执行文件:
上面的命令可以生成带有符号文件和调试信息的DEBUG版本,你的应用程序将生成在.\bin\Debug\netcoreapp1.0\< runtime_identifier>目录下,如果想生成生产环境的最终版本请通过如下命令获取:
通过上述命令生成的Release版本目标执行文件将生成在.\bin\release\netcoreapp1.0\<runtime_identifier>目录下,并且每一个目标平台目录下都有生成的可执行文件、发布项目的程序集、.NET Core依赖或必要的文件等来保证生成程序的独立可执行。
我们来看一个新的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
四、系统依赖
发布出来的目标平台可执行文件,也是需要依赖系统特性的,接下来我们来看下系统的需要组件有哪些:
WindowsUbuntuCentOSOS 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 New csproj 如何发布可执行文件
- .NET Core New csproj 如何发布可执行文件
- .NET Core 构建配置文件从 project.json 到 .csproj
- .NET Core 最小化发布
- .NET Core 最小化发布
- .NET Core 最小化发布
- .NET Core 最小化发布
- .NET Core项目从xproj+project.json向csproj迁移简介
- 测试 asp.net core 发布
- .NET Core 2.0 正式发布
- .NET Core 2.0发布了
- 发布 ASP.NET Core 应用
- 在Centos7下发布.NET CORE项目
- .NET Core程序发布到Ubuntu系统
- Asp.net Core 打包发布 (Linux+Nginx)
- .net core web发布到CentOS汇总
- 发布asp.net core 应用 在IIS
- .NET Core 2.0 正式发布信息汇总
- WebGis系统基本架构
- ASP.NET MVC使用中转站方式获取code实现微信登录,分享功能
- Eclipse Benchmark 基准测试 报错:ERROR: Unable to find the resource: /META-INF/BenchmarkList
- java泛型的了解
- Android之RecycleView下拉刷新上滑加载更多
- .NET Core New csproj 如何发布可执行文件
- 远程连接linux的mysql服务报错10061的解决方案
- html5新增标签
- 【Zookeeper】源码分析之服务器(三)
- 高性能的消息队列 (三)
- [编程题]求序列和
- Centos7下rc.local文件开机不执行
- 2.二维数组中的查找
- 参数用一个数组还是分开几个