.Net学习

1 什么是.NET Core

.NET是开发平台,.NET Framework、.NET Core、Xamaarin/Mono的统称。

.NET Framework是只能在Windows上开发的技术

.NET Core是可以跨平台开发的技术

Xamaarin/Mono是移动端开发的技术

.NET Core:跨平台、免费、开源,可以在云计算上开发的技术

跨平台指的是:程序可以运行在Windows、Linux、Mac操作系统上

什么是云计算?

背景:传统软件开发中服务器部署是:搞个机房,买上100台服务器放里头。但事实上平常需要的服务器只要10台,只是偶尔的高峰期才需要100台,这就造成了浪费。

云计算:就是在网络上联系服务器厂商,来买多少服务器的多长时间的使用权限。就前面一个例子,我只需买10台服务器放机房,等某10天需要用100台服务器时,就远程联系厂家,购买他们90台服务器10天的使用权限,大大的节约了成本。.NET Core就是为云而生的技术

2 .NET Core的重要问题

.NET Framework与.NET Core中大部分类相同,但.NET Core不是.NET Framework的无缝升级,有1%的程序不能在这两个平台上都编译。

mono技术可以使.NET Framework在Linux上运行,但为什么微软还要推出.NET Core,因为:

. NET Framework缺点:
1、系统级别的安装,互相影响
2、无法独立部署
3、ASP. NET 和IIS深度耦合
4、ASP.NET资源消耗大
5、非云原生

.NET Framework历史包袱:
1、带着手铐脚镣长大的ASP. NET MVC
2、ASP. NET底层不支持很好的单元测试

NET Core的优点:
(1)支持独立部署,不互相影响;
(2)彻底模块化;
(3) 没有历史包袱,运行效率高
(4) 不依赖于IIS
(5)跨平台
(6)符合现代开发理念,依赖注入、单元测试等

.NET Core和.NET Framework不同:
(1).NET Core不支持:
ASP. NET WebForms. WCF服务务器端、WF、.NET Remoting、Appdomain
(2).NET core部分只能在Windows运行的,无法跨平台的技术:WinForm、WPF、注册表、Event Log、AD等。但是除了上述第5个跨平台优点不具有外,其他优点都具有。

3 .NET Standard

.NET Framework .NET Core笼统的称为.net,它们和Xamaarin必须遵守 .NET Standard标准,这个标准规定了.NET Framework和 .NET Core要有什么类,类中有什么方法,而.NET Framework和 .NET Core就需要负责怎么实现这些类,以及类中的方法。

虽然.NET Framework .NET Core和Xamaarin会有一些特殊的类,但也须遵守 .NET Standard标准

注意:

①NeT Standad只是规范,一个NET Standard类库可以被支持其版本的.NET Framework、NET Core、Xamarin等引用。

而.NET Core类库、.NET Framework类库则不可以。
如果编写一个公用的类库,尽量选择.NETStandard,并且尽量用低版本。因为它自身版本高的话,不能支持低版本.NET Framework、NET Core。
 

②NET Framework支持到.NET Standard 2.0为止
官方说明
从.NET 5开始,微软开始淡化其他叫法,统一为.NET,后续默认.NET就是指的. NET Core。

实操:

验证.NET Standard只是提供标准,不负责实现:
(1)新建.NET Standard类库项目,确认版本是2.0,建个类,方法中打印typeof (FileStream).     Assembly. Location.

using System;
using System.IO;namespace TestLib1
{public static class Class1{public void Test() {Console.WriteLine(typeof(FileStream).Assembly.Location);//拿到FileStream的类型 所在的程序集 所在的磁盘空间位置}}
}

(2) 分别建.NET Framework和.NET Core的控制台项目,添加对类库项目引用,并且调用。

类库项目无法直接运行,在解决方案中新建一个.NET Core控制台项目还有一个.NET Framework控制台项目。然后它们都引用刚刚新建的.NET Standard类库项目

细节:.NET Standard有类库但是没有控制台,是因为它只是一个标准,不是实现。所以说类库可以符合一个标准,但是一个控制台无法通过.NET Standard来运行。

.NET Core控制台项目代码以及运行结果:

using System;
using System.IO;namespace ClassLibrary1
{public class Class1{public static void Test(){Console.WriteLine(typeof(FileStream).Assembly.Location);//拿到FileStream的类型 所在的程序集 所在的磁盘空间位置Console.WriteLine(typeof(Class1).Assembly.Location);}}
}

.NET Framework控制台项目代码以及运行结果:

using ClassLibrary1;
using System;namespace FrameworkConsole1
{internal class Program{static void Main(string[] args){Class1.Test();Console.ReadLine();}}
}

在.NET Standard类库项目中,查看FileStream定义,可以看到它所在的位置:

// C:\Users\31513\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\netstandard.dll

可以看出,三个项目中对于同一个FileStream的类型 所在的程序集 所在的磁盘空间位置不同,也就是它们在不同项目中属于不同程序集。

(3) 用反编译工具ILSpy(尽管开源)分别反编译VS中FileStream、.NET Framework和.NET       Core运行中的。BeginRead方法实现以及定义有不同。

反编译器ILSpy,能够将程序集转成源码。现在看下同一个FileStream的类型 所在的程序集的源码有什么不一样。

ILSpy下载地址:GitCode - 全球开发者的开源社区,开源代码托管平台

①通过反编译.NET Standard中的程序集得到的源码看到:

有很多的方法和类,但是没有方法体,都是空的,并且上方有提示:只含源数据,不包含可执行代码。

结论:只有定义,没有实现

②通过反编译.NET Core中的程序集得到的源码看到:

③通过反编译.NET Framework中的程序集得到的源码看到: 

 结论:后两个对方法都有实现,部分同一个方法实现会有点不同。

4 .NET开发环境安装配置

.NET 开发工具:
(1). NET CLI: 命令行
(2) Visual Studio: Windows-Only(推荐)
(3)Visual Studio for Mac
(4)Jetbrains Rider: 收费
(5) VS Code(Visual Studio Code) :跨平台

微软文档地址:下载 .NET(Linux、macOS 和 Windows)

(建议多看文档,提高自学能力)

安装了.net,就自带1). NET CLI,可以用cmd命令行来敲代码装佬,

dotnet --version 查看版本
dotnet new console//在当前文件夹建立一个控制台项目
dotnet run 构建并运行
详细可见官方文档“.NET CLI”部分

 以下是实操截图:

 查文档,看所需命令

 

5 .NET项目结构及程序发布

csproj项目文件

这是.NET Core的csproj文件,csproj文件是项目文件,主要描述一些项目的信息,描述是什么类型的项目、用的net版本号……

(可以在vs双击进行修改)

 这是.NET Framework的csproj文件,复杂了很多。项目引用了哪些程序集、有哪些源代码文件、描述是什么类型的项目、用的net版本号……

(不可以在vs双击进行修改,只能在文件夹中修改,容易出错,不建议改)

 包含这个项目所有的文件

注意点:

在.NET Framework中,移除某个文件后,该文件就不会出现在csproj项目文件中。

在.NET Core中,移除某个文件后,该文件才会出现在csproj项目文件中。因为它默认包含所有已有的文件,但移除某个文件后,会在csproj项目文件显式表现出

例:在.NET Core中,移除Class.cs文件,可以在csproj项目文件看到:

程序的发布

程序发布后,可以把那个包在别的电脑上运行

部署模式中,

选依赖框架,则要在目标计算机上安装.net运行环境。

选独立,则不用在目标计算机上安装.net运行环境,它生成的包里就含有.net运行环境。

一般都选独立,可以达到多个项目互不干扰。

目标运行时:

选可移植,则可兼容各个操作系统。也可选具体操作系统。

还有这文件发布选项,

生成单个文件:避免出现一大堆文件,会以几个个文件夹形式呈现

启用Ready ToRun编译:会提高启动速度,降低编译速度。

裁剪未使用的代码: 将用不到的程序集不打包

启用Ready ToRun编译、裁剪未使用的代码都有缺点,用到时可查看官方文档了解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/35215.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

半监督学习与数据增强

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

【成功解决:Can‘t uninstall ‘ultralytics‘. No files were found to uninstall.】

问题: 尝试卸载ultralytics时,使用pip uninstall ultralytics命令,已经卸载了ultralytics,但是仍出现Cant uninstall ultralytics. No files were found to uninstall,导致无法卸载干净。 原因 ultralytics相应的dis…

AcWing 3496. 特殊年份

文章目录 前言代码思路 前言 写简单题没啥。反正都是要写的&#xff0c;先把能拿到的分数拿了&#xff0c;之后有机会再去啃一啃硬骨头。啃不下来就算了。 代码 #include<bits/stdc.h> using namespace std; char a1[10],a2[10],a3[10],a4[10],a5[10]; int main(){cin…

MongoDB性能监控工具

mongostat mongostat是MongoDB自带的监控工具&#xff0c;其可以提供数据库节点或者整个集群当前的状态视图。该功能的设计非常类似于Linux系统中的vmstat命令&#xff0c;可以呈现出实时的状态变化。不同的是&#xff0c;mongostat所监视的对象是数据库进程。mongostat常用于…

【LeetCode: 999. 可以被一步捕获的棋子数 + 模拟】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

智创 AI 新视界 -- 优化 AI 模型训练效率的策略与技巧(16 - 1)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

专业140+总分420+上海交通大学819考研经验上交电子信息与通信工程,真题,大纲,参考书。博睿泽信息通信考研论坛,信息通信考研Jenny

考研结束&#xff0c;专业819信号系统与信号处理140&#xff0c;总分420&#xff0c;终于梦圆交大&#xff0c;高考时敢都不敢想目标&#xff0c;现在已经成为现实&#xff0c;考研后劲很大&#xff0c;这一年的复习经历&#xff0c;还是历历在目&#xff0c;整理一下&#xff…

K8S服务突然中断无法访问:报The node had condition: [DiskPressure]异常

一、背景 程序在运行过程中&#xff0c;突然无法访问&#xff0c;发现后台接口也无法访问&#xff1b;查看kuboard&#xff0c;发现报如下异常&#xff1a;The node had condition: [DiskPressure]. 继续查看磁盘使用率&#xff0c;发现系统盘使用率已经高达93%。问题前后呼应…

【工具变量】上市公司企业违规数据(企业当年是否违规、企业当年违规的次数)2000-2022年

一、测算方式&#xff1a;参考C刊《当代财经》纪亚方&#xff08;2023&#xff09;老师的研究&#xff0c;通过对上市公司被处罚涉及的年份进行追溯&#xff0c;为了保证企业违规行为变量度量的准确性&#xff0c;将追溯到公司被处罚的年份定义为违规年份。 采用两个指标对企业…

视频孪生携手视联网 智汇云舟亮相中国电信2024数字科技生态大会

12月3日&#xff0c;由中国电信主办的“2024数字科技生态大会”在广州盛大开幕。活动现场&#xff0c;前沿科技与创新理念交相辉映&#xff0c;数字科技未来蓝图徐徐展开。智汇云舟作为中国电信的战略合作伙伴&#xff0c;受邀出席本次活动。 展会期间&#xff0c;以“天翼视联…

Unity 使用LineRenderer制作模拟2d绳子

效果展示&#xff1a; 实现如下&#xff1a; 首先&#xff0c;直接上代码&#xff1a; using System.Collections; using System.Collections.Generic; using UnityEngine;public class LineFourRender : MonoBehaviour {public Transform StartNode;public Transform MidNod…

力扣-图论-4【算法学习day.54】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;&#xff09;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非…

【射频IC进阶实践教程】2.6 LNA版图设计及DRC/LVS验证

射频集成电路的版图设计非常关键&#xff0c;他对寄生参数非常敏感&#xff0c;需要使其最小化。还需要注意相互耦合的方式本次课程主要介绍射频IC的一些相关布局和连线方面的考虑。 一、版图设计 1. 版图的元件布局 首先打开对应的原理图 点击进行版图设计 由于已经有做好的…

uviewplus中的时间单选框up-datetime-picker的在uni-app+vue3的使用方法

uviewplus中的时间单选框up-datetime-picker的使用方法 前言 在实际开发中,我们经常需要使用时间选择器来让用户选择特定的时间。本文将详细介绍uviewplus中up-datetime-picker组件的使用方法,特别是在处理年月选择时的一些关键实现&#xff0c;因为官方有很多相关的功能和方法…

Spring Bean 的生命周期和获取方式

优质博文&#xff1a;IT-BLOG-CN 一、Spring Bean 的生命周期&#xff0c;如何被管理的 对于普通的 Java对象&#xff0c;当 new的时候创建对象&#xff0c;当它没有任何引用的时候被垃圾回收机制回收。而由 Spring IoC容器托管的对象&#xff0c;它们的生命周期完全由容器控…

【Spring MVC篇】返回响应

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【Spring MVC】 本专栏旨在分享学习Spring MVC的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 一、返回静态页面…

使用Python创建API服务器并打包成exe文件

本文来记录下使用Python创建API服务器并打包成exe文件 文章目录 概述简述API服务器创建打包API服务器为exe文件本文小结 概述 在软件开发中&#xff0c;API服务器是连接前端和后端服务的桥梁&#xff0c;而Python因其丰富的库和框架&#xff0c;如Flask、Django等&#xff0c;成…

MHA切换过程

MHA&#xff08;Master High Availability&#xff09;是一套用于MySQL数据库的高可用性解决方案&#xff0c;它能够在主服务器发生故障时自动将一个从服务器提升为新的主服务器&#xff0c;从而实现数据库服务的持续可用。MHA的切换过程主要包括以下几个步骤&#xff1a; 1. …

NextUI 教程:打造美观高效的React UI

NextUI 教程&#xff1a;打造美观高效的React UI 项目地址:https://gitcode.com/gh_mirrors/ne/nextui 1. 项目介绍 NextUI 是一个轻量级、快速且现代化的React UI库&#xff0c;提供了一系列优雅的组件以帮助开发者构建令人印象深刻的Web应用。它注重性能和用户体验&#x…

Python和Java后端开发技术对比

在当今互联网技术飞速发展的时代&#xff0c;后端开发扮演着至关重要的角色。Python和Java作为两大主流的后端开发语言&#xff0c;各自具备独特的优势和应用场景。让我们深入了解这两种技术的特点和选择建议。 Java后端开发一直是企业级应用的首选方案。它以强大的类型系统、…