.NET Core New csproj 如何发布可执行文件
一、前言
.NET工具鏈在最新的Preview3版本中,引入了新的MSBuild項(xiàng)目系統(tǒng),項(xiàng)目文件又回歸了.csproj的XML文件來(lái)管理,項(xiàng)目文件、包引用、程序集引用、.NET Core工具集、發(fā)布內(nèi)容定義等內(nèi)容。本文主要將主要討論,如何在新的項(xiàng)目系統(tǒng)中(.csproj)發(fā)布可執(zhí)行文件。我們都知道在之前的版本中,項(xiàng)目文件是通過(guò)project.json文件來(lái)管理項(xiàng)目和包引用的,那么通過(guò)刪除?dependencies->Microsoft.NETCore.App->?"type": "platform"?子節(jié)點(diǎn),并定義runtimes節(jié)點(diǎn),來(lái)發(fā)布可執(zhí)行文件(想了解的朋友可以閱讀這篇文章) 。
所為可執(zhí)行文件就是在目標(biāo)機(jī)器上,不需要安裝.NET Core SDK或任何Runtime,就可以執(zhí)行的文件。比如在Windows上可以生成 coreapp.exe的可執(zhí)行文件,而在Linux中可以使用 ./coreapp 來(lái)執(zhí)行。
原理上這種可執(zhí)行文件,就是通過(guò)一個(gè)C++應(yīng)用程序?yàn)檩d體(宿主),加載CoreCLR,通過(guò)CoreCLR再加載任意的程序集,對(duì)這里有興趣的朋友也可以到Github上去看一下CoreCLR中ClrHost的部分。
二、生成可執(zhí)行
在新的.csproj項(xiàng)目文件中,我們要想發(fā)布一個(gè)可執(zhí)行文件,就在手動(dòng)創(chuàng)建名為<RuntimeIdentifiers>的節(jié)點(diǎn),在這個(gè)節(jié)點(diǎn)下面,添加RuntimeIdentifiers也就是以前的RID定義,RID是描述系統(tǒng)平臺(tái)的統(tǒng)一命名標(biāo)示。例如我想要發(fā)布的可執(zhí)行文件的目標(biāo)系統(tǒng)平臺(tái)為Win10和Mac os 10.11.*?定義如下:
<PropertyGroup>
? ? ?<RuntimeIdentifiers>win10-x64;osx.10.11-x64</RuntimeIdentifiers>
</PropertyGroup>
通過(guò)如下命令發(fā)布各平臺(tái)的目標(biāo)可執(zhí)行文件:
dotnet build -r win10-x64
dotnet build -r osx.10.11-x64
上面的命令可以生成帶有符號(hào)文件和調(diào)試信息的DEBUG版本,你的應(yīng)用程序?qū)⑸稍?strong>?.\bin\Debug\netcoreapp1.0\< runtime_identifier>目錄下,如果想生成生產(chǎn)環(huán)境的最終版本請(qǐng)通過(guò)如下命令獲取:
dotnet publish -c release -r win10-x64
dotnet publish -c release -r osx.10.11-x64
通過(guò)上述命令生成的Release版本目標(biāo)執(zhí)行文件將生成在?.\bin\release\netcoreapp1.0\<runtime_identifier>目錄下,并且每一個(gè)目標(biāo)平臺(tái)目錄下都有生成的可執(zhí)行文件、發(fā)布項(xiàng)目的程序集、.NET Core依賴(lài)或必要的文件等來(lái)保證生成程序的獨(dú)立可執(zhí)行。
我們來(lái)看一個(gè)新的csproj文件的完整定義:
<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>
三、RID
RID是Runtime Identifier的縮寫(xiě),它用于定義目標(biāo)操作系統(tǒng)標(biāo)示。RID會(huì)不斷的更新,我們可以在CoreFx項(xiàng)目中找到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
四、系統(tǒng)依賴(lài)
發(fā)布出來(lái)的目標(biāo)平臺(tái)可執(zhí)行文件,也是需要依賴(lài)系統(tǒng)特性的,接下來(lái)我們來(lái)看下系統(tǒng)的需要組件有哪些:
| Windows | Ubuntu | CentOS | OS X |
?
| ?
| ?
| ? ? ?
? |
原文地址:http://www.cnblogs.com/maxzhang1985/p/6136886.html
.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺(tái)或掃描二維碼關(guān)注
總結(jié)
以上是生活随笔為你收集整理的.NET Core New csproj 如何发布可执行文件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: FinTech浪潮已到,五大金融场景将迎
- 下一篇: .NET Core 首例 Office