一、媒介
.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.* 定义以下:
<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文件的完全定义:
<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的缩写,它用于定义目的操作体系标示。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 |
|
|
|
|
以上就是.NET Core如安在新的项目体系中(.csproj)宣布可实行文件的细致内容,更多请关注ki4网别的相干文章!