vs直接发布的控制台上面没有自己的文件夹了_.net core项目结构与发布

3a8504ff3d7be6bc71aa99cbc0371bda.png

本文的目的是记录与分享自己的学习过程和个人你的看法。如果对你有任何帮助深感荣幸,若有任何纰漏烦请指正。


我们通过一个简单的项目了解 .net core的项目结构和发布过程。使用 .net core2.1 sdk来创建一个最简单的C#项目,你可以去下面这个链接下载SDK。

.NET SDK下载​dotnet.microsoft.com
f4e5ad24f4327eb455d4337bc134f887.png

使用版本为2.1.4

741b184f250d435cc41a383099ef6a15.png

安装完成之后,运行dotnet new命令可以查看可以创建的项目,它显示了可创建的项目类型以及支持的语言。

19046589a096744610cdbb3d55cc566e.png
dotnet new

要创建一个项目,首先需要一个用来存放项目的文件夹比如myapp。

6d86a57476f0776b6c24c54264ef540a.png

然后进入文件夹,创建一个console项目就运行命令行dotnet new console,如果要创建其他项目比如F#的 MVC项目就可以用命令dotnet new mvc -lang f#。

29d68d96874760a4bbf959246bee5b7a.png

当创建好模版后可以看到SDK还会执行dotnet restore命令,这个命令用于还原项目的依赖,更详细内容可转到下面的链接。

dotnet restore 命令- .NET Core CLI​docs.microsoft.com
177d91355f3cd3e93ab8f50d106de8b1.png

这样就创建好了一个语言为C#的console项目模版,项目里包含了下面的内容。

ffb1297e1afe86a0e3723f65011a5cd0.png

其中obj文件夹包含了编译与生成时需要的和产生的中间文件,一般不需要关注。

myapp.csproj即项目文件(其他语言的项目文件后缀F#为.fsproj,VB为vbproj 这和1.x版本中使用project.json等文件来组织和配置项目的方式完全不同),这个文件是项目组织和配置的核心,会在生成时被MSBuild用来作为输入。csproj文件的本质是一个保存项目信息的xml文件,打开它我们可以看到以下内容

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.0</TargetFramework>
  </PropertyGroup>
</Project>

其中OutputType指定了当前项目的类型,TargetFramework指定了当前项目所用的框架,全部的TargetFramework支持项可以在下面找到,但当前对于非类库的 .net core项目支持的只有netcoreapp1.0,netcoreapp1.1,netcoreapp2.0,我们使用2.1版本所以应当是netcoreapp2.0,别问为什么 <( ̄3 ̄)> 。(注:此处应该是TFMs未更新,最新的TFMs已经添加了netcoreapp2.1)

Target frameworks​docs.microsoft.com
177d91355f3cd3e93ab8f50d106de8b1.png

完整的项目文件格式参考可以在下面的链接中找到。

MSBuild Project File Schema Reference - Visual Studio​docs.microsoft.com
177d91355f3cd3e93ab8f50d106de8b1.png

Progam.cs就是程序的代码文件,里面已经写了一段最基本的HelloWord代码,将它改成Hello Zhihu!,并添加一行控制台读取代码。

using System;

namespace myapp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello Zhihu!");
            Console.ReadLine();
        }
    }
}

现在你可以使用适合你的开发工具进行开发了,微软推荐的开发工具可以在下面链接看到,个人推荐Visual Studio Community版,好用不要钱!。

.NET 开发工具​www.microsoft.com
f4e5ad24f4327eb455d4337bc134f887.png

开始写代码!

6f48be901e666741afbfca6b4621f70a.gif

写完代码就可以测试运行,在项目文件下运行dotnet run。

665f59a28695264f3241e8c00f4a2976.png
我他娘的真是个天才!

当你完成项目开发后就可以发布项目了,.net core项目发布有两种常见的方式:

Framework-dependent deployment(FDD)/框架依赖部署

这种部署方式最明显的特点就是需要在目标系统上安装 .net core运行时,这也是它最大的缺点。它的优点包括你在发布时不需要指定你的目标平台,并且你的发布包的体积会更小,也可以节省你目标系统上的磁盘空间,因为多个 .net core程序可以使用一个Runtime。

可以直接在项目文件夹下运行dotnet publish -c Release命令行来执行发布。

dotnet publish 命令 - .NET Core CLI​docs.microsoft.com
177d91355f3cd3e93ab8f50d106de8b1.png

c33e48b99c9ba99f791fa794043d2a17.png

你也可以选择直接在Visual studio生成,可以看到vs也是使用MSBuild工具来生成项目。

54d72866a9cd4b2a3a662d0cb7bb10e1.png

发布完成后,我们可以在发布目录binReleasenetcoreapp2.0publish里看到结果。

3f9a27d887e0bc0f359a836fba3d706c.png

其中myapp.dll为项目生成的托管程序集(Managed Assembly)文件,通俗的说就是程序本体。

myapp.pdb全称为program database (PDB) symbol file,这个文件存储了对应dll内部的所有符号,以及符号对应的地址、文件名和行号,这些信息会在调试时被用以提供可读的调试信息。要了解更多细节可前往

PDB Symbol Files​docs.microsoft.com
177d91355f3cd3e93ab8f50d106de8b1.png

myapp.deps.json和myapp.runtimeconfig.json两个文件对于之前的 .net开发者会很陌生,

myapp.runtimeconfig.json是一个可选的配置文件包含了运行时的配置信息。这个文件被设计为是用户可编辑的,你可以通过配置它来改变运行时的行为。

myapp.deps.json文件保存一个依赖的列表,也就是编译上下文数据和编译依赖,不是技术上需要的,但是在使用服务,包缓存或共享这些安装功能的时候是需要的。(不知道翻译对不对,看原文吧)。这个文件由程序进行处理和使用,用户不应编辑。

MyApp.runtimeconfig.json - An optional configuration file containing runtime configuration settings. MyApp.deps.json - A list of dependencies, as well as compilation context data and compilation dependencies. Not technically required, but required to use the servicing or package cache/shared package install features.

更详细的信息可在dotnet cli的github项目找到

dotnet/cli runtime configuration file​github.com
779deaf20e9d3ce3092bb724bafd6cd3.png

到此,FDD方式的发布方式结束,你可以在安装运行时的系统上运行 dotnet myapp.dll来运行程序。

828aa6e44a5d3ee7b2645b78da851142.png

Self-contained deployment(SCD)/自包含部署

SCD就是在发布时SDK将Runtime也做为部署包内容的一部分,这样你就不需要在目标系统上安装 .net core运行时了。但是这样就需要你在发布时指定你要发布到的平台是什么,这个在 .net core里叫做RID(Runtime IDentifier/运行时标识符),比如windows10 x64系统就是win10-x64,全部的RID可以在下面链接里找到

dotnet/corefx​github.com
779deaf20e9d3ce3092bb724bafd6cd3.png

它也是包管理的关键配置之一,以后在学习nuget的时候会碰到,本篇不做更多阐述。

在确定我们要发布到的平台后就可以使用命令行dotnet publish -r win10-x64 -c Release2 如果没有错误那我们就发布成功了!

0b33505162f612d58b5ba2c2b9825a17.png

在发布文件夹下我们可以看到很多文件,这其中就包含了 .net core运行时,而且包含了一个项目对应平台的可执行文件myapp.exe,(其他平台上则会有对应的执行文件,比如选择rhel后会生成一个不带后缀的myapp文件)这样我们就可以直接双击myapp.exe来执行了,哈利路亚!

fc7051997219fca33f4b92d537a9513d.png
老.net framework开发者想哭。

当然这样的本地化程序体验也是有代价的,我们来看下以win-x64为目标平台的两种发布方式发布包的体积。

7c195e78a27bce5544d1dea094a1efd7.png

可以看到SCD的发布方式比FDD的方式会多62MB。所以选择哪种方式发布需要看你项目的具体需求。

除了以上两种常用的发布方式,.net core还有另外一种“黑科技”发布方式 AOT(ahead of time)。上面介绍的两种方式除了SCD方式的exe文件外,项目的dll均为字节码(CIL Byte Code),也就是Roslyn编译后的程序集。.net core从源代码到用于执行的机器码的顺序为:源代码->编译时的Roslyn编译为字节码程序集->运行时的JIT(即时编译器)编译为机器码(Machine Code)->执行,而AOT的方式是将运行时的JIT编译放在编译时,所以你发布后的dll包含的是机器码。可以一定程度的提高运行效率。更详细的信息可以在下面的链接找到。

dotnet/corert​github.com
779deaf20e9d3ce3092bb724bafd6cd3.png

到此我们简单介绍了 .net core的项目结构与发布方式。希望以后会有更多其他平台的开发者选择 .net core,因为C#真的是很优秀的语言啊!

3a158f8a7a1252beb5f63d3493aa8978.png

都看到这了还不点赞关注走一波((o(^_ ^)o))。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值