精华内容
参与话题
问答
  • .net 开发文档 ASP.NET Core 2.1 ASP.NET Core 3.0.1 EF Core 和 EF6 ;
  • 什么是Asp.Net core 我相信很多C# Developer已经对于.net core不算陌生了,就算没有正式使用相信也应该有所了解。微软在推出来.net core的同时为了方便一些原有的项目可以方便迁移,同时推出了Asp.net core。那么...

    什么是Asp.Net core

    我相信很多C# Developer已经对于.net core不算陌生了,就算没有正式使用相信也应该有所了解。微软在推出来.net core的同时为了方便一些原有的项目可以方便迁移,同时推出了Asp.net core。那么.net coreAsp.net core是不是同一个东西呢?如果不是又有什么区别呢?

    下面我们分别说明一下,首先Asp.net core.net core肯定不是同一个东西(废话,如果是同一个东西还写这么多干啥!)。

    Asp.net core其实就是仍然基于.net Full Framework(最低要求Framework 4.6.2)的项目, 但同时保留了.net core一些新的设置理念,比如Asp.net core默认使用Kestrel作为Http请求的监听器,而不是使用原来庞大的Https.sysKestrel不仅仅是微软下一代的跨平台Http请求监听器,同时还提供了比Https.sys更轻量级以及更快速的Http请求处理。另除此之外,Asp.net core与原来的Web设计另一个最大的区别在于Asp.net core(及.net core)完全抛弃了原来的使用管道模式来接收以及处理HttpRequest。在Asp.net core中允许处理中间件(Middleware)来对所有的HttpRequest来进行请求,当请求被接收到时,Asp.net core会调用注册的中间件(按照注册的顺序)对HttpRequest进行处理。这样做相比与原来使用HttpApplication的管道方式而言,其优势在于完全由开发人员决定HttpRequest需要执行怎么样的处理,没有多余的其他步骤。而原来的方式既使开发人员不希望对一个HttpRequest进行任何处理,但HttpApplication仍然会按照管道的设置依次创建HttpModel -> 激活HttpHandler -> 处理Session等。据.net core团队给出来的性能测试数据来看,Asp.net core(.net core)相比与原来的Web(.net framework 4.6)程序性能提升了2300%.

    .net core其实就是保留了上面所说的优势的同时支持跨平台运行。.net core的系统是可以真正运行在除Windows以外的其他平台的。轻量级、跨平台、模块化是.net core整体的设计理念,同时也是微软产品理念转变的一个体现。.net core虽然有千般好,但是我们当前仍然没有直接使用它,因为它现在有一个致使的“缺陷”那就是生态环境,由于.net core的API已经完全重写,虽然当前已经提供了.net farework 90%以上的API,但是仍然会造成一些开发上的不便,当然这还不是最大的问题,最大的问题在于一些第三方Nuget包仍然不支持.net core。这样就会造成一些项目无法直接迁移或是迁移成本太高的问题。

    如何创建一个Asp.net core的项目

    说了这么多,我们来看一下在创建项目时Asp.net core.net core有什么不同吧,我们以Vistual studio 2017上创建项目为例,首先打开VS2017后点击创建项目-> Asp.net core web应用,这时会弹出模版选择的窗口。
    技术分享图片
    在这个选择窗口中我们可以看到在左上角的那个下拉列表中可以选择.net framework以及.net core。当我们选择.net framewrok时创建出来的项目工程即为asp.net core。项目创建成功后可以在项目的属性中看到使用的Framework版本是4.6.2。但是项目文件的组织结构已经和.net core的项目结构一样了。

    Asp.net core项目的"坑"

    近期在对新的项目进行性能测试时发现系统的内存占用似乎只能使用到1.5G。经过多次测试以及代码检查终于发现新创建出来的Asp.net core的项目默认的目标平台是X86而不是AnyCPU。当尝试在VS中新目标平台改为AnyCPU时发现项目不能运行,抛出异常"无法加载 DLL“libuv”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。",无奈只能将项目的目标平台改为X64,然后发现在开发环境已经一切正常,但是当将代码部署到Azure App Service上时系统仍然不能访问,异常和上面的相同。最后检查了项目的工程文件(*.proj)然后发现虽然PlatformTarget一项中已经改为X64,但是在PlatformTarget的属性中Platform仍然是AnyCPU,手动修改工程文件将AnyCPU改为X64后一切正常
    技术分享图片

    展开全文
  • <p>We are moving ASP.NET Core WebHooks out of the ASP.NET Core 2.1 to give more time to validate the design and implementation. We will continue to ship previews ASP.NET Core WebHooks packages, but ...
  • ASP.Net Core

    2017-08-16 08:58:26
    什么是Asp.Net CoreASP.NET Core 是.NET Framework的下一代版本,是一个新的开源和跨平台的框架,用于构建如 Web 应用、物联网(IoT)应用和移动后端应用等连接到互联网的基于云的现代应用程序。 ASP.NET Core...

    什么是Asp.Net Core?

    ASP.NET Core 是.NET Framework的下一代版本,是一个新的开源和跨平台的框架,用于构建如 Web
    应用、物联网(IoT)应用和移动后端应用等连接到互联网的基于云的现代应用程序。 ASP.NET Core 应用可运行于 .NET Core
    和完整的 .NET Framework 之上。 构建它的目的是为那些部署在云端或者内部运行的应用提供一个优化的开发框架。

    ASP.NET Core有何新特点?

    1. 一个统一的方式用于构建 web UI 和 web APIs
    2. 集成 现代的客户端开发框架 和开发流程
    3. 一个适用于云的,基于环境的 配置系统
    4. 内置的 依赖注入
    5. 新型的轻量级的、模块化 HTTP 请求管道
    6. 运行于 IIS 或者自宿主(self-host)于你自己的进程的能力
    7. 基于支持真正的 side-by-side 应用程序版本化的 .NET Core 构建
    8. 完全以 NuGet 包的形式发布
    9. 新的用于简化现代 web 开发的工具
    10. 可以在 Windows 、Mac 和 Linux 上构建和运行跨平台的 ASP.NET 应用
    11. 开源并且重视社区

    .Net Core基本文件分析

    program.cs文件:

    using System;
    using Microsoft.AspNetCore.Hosting;
    
    namespace aspnetcore
    {
        public class Program
        {
            public static void Main(string[] args)
            {
                var host = new WebHostBuilder()
                    .UseKestrel()
                    .UseStartup<Startup>()
                    .Build();
    
                host.Run();
            }
        }
    }

    ASP.NET Core 应用在 Main 方法中创建一个 web 服务器
    WebHostBuilder是web服务器的构造器,它包含用于定义 web 服务器 (如 Kestrel)和 startup 类型( 如 Startup)的方法。
    BuildRun 方法构建了应用于宿主应用程序的 IWebHost 然后启动它来监听传入的 HTTP 请求。

    Startup.cs文件:

    Startup 类是应用程序的入口,用来定义请求处理管道和配置应用需要的服务,startup文件最少要包含以下2个方法:

    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {      
                services.AddMvc();
        }
    
        public void Configure(IApplicationBuilder app)
        {
            app.UseStaticFiles();
            app.UseIdentity();
            app.UseMvc(routes =>
                {
                    routes.MapRoute(
                        name: "default",
                        template: "{controller=Home}/{action=Index}/{id?}");
                });
        }
    }

    ConfigureServices 定义了应用所使用的服务(Service)(例如 ASP.NET MVC Core framework、Entity Framework Core、Identity 等)
    Configure 定义了请求管道中的 中间件(middleware)

    服务(Service) 通过依赖注入获取并使用。 ASP.NET Core 内置了一个简单的IoC容器,它默认支持构造器注入,并且可以替换成自己需要的 IoC 容器。通过依赖注入(DI) 使服务在整个应用中都可以使用。

    使用 中间件(middleware)构建请求处理管道。Configure中定义了静态文件(Static files)、路由(Routing)、身份验证(Authentication)、错误处理等中间件。

    Web根目录(wwwroot)

    wwwroot用于保存公共的、静态的资源,如 css、js 和 图片文件的目录。

    参考资源

    ASP.Net core 介绍中文文档:
    http://www.cnblogs.com/dotNETCoreSG/p/aspnetcore-0-intro.html
    ASP.Net core Introduce原文:
    https://docs.microsoft.com/zh-cn/aspnet/core/

    展开全文
  • 命名是非常困难的事情,微软这次为了和ASP.NET4.6做区分,采用了全新的命名方式ASP.NET Core 1.0,它是一个全新的框架。
  • ASP.NET Core 实战:将 .NET Core 2.0 项目升级到 .NET Core 2.1 原文:ASP.NET Core 实战:将 .NET Core 2.0 项目升级到 .NET Core 2.1一、前言  最近一两个星期,加班,然后回去后弄自己的博客,把...
    原文:ASP.NET Core 实战:将 .NET Core 2.0 项目升级到 .NET Core 2.1

     一、前言

       最近一两个星期,加班,然后回去后弄自己的博客,把自己的电脑从 Windows 10 改到 Ubuntu 18.10 又弄回 Windows 10,原本计划的学习 Vue 中生命周期的相关知识目前也没有任何的进展,嗯,罪过罪过。看了眼时间,11月也快要结束了,准备补上一篇如何将我们的 .NET Core 2.0 版本的程序升级到 .NET Core 2.1 版本,好歹也算多学了一点。

       在上一篇的博客中(ASP.NET Core 实战:Linux 小白的 .NET Core 部署之路),试着将我之前写的 ASP.NET Core 2.0 的项目部署到 Linux 服务器上,采用的是微软官方推荐的 Nginx + Supervisor 的方式,评论区的小伙伴提出了使用 Docker 的方式可以更便捷的实现,同时对于新手来说也会更好上手。嗯,新手向的使用 Docker 部署 ASP.NET Core 项目也会在之后的文章中体现。欢迎多多关注啊。

     二、起因

       .NET Core 2.1 发布于今年的5月30号,从版本号我们可以看出这只是一个小版本的升级,从微软官方发布的更新信息来看,对比于 .NET Core 2.0 版本,更多的是进行性能的优化、对于 .NET Core Runtime、.NET Core tools 的更改以及增加 API 或是增加更多的系统支持。

       在上一篇的文章中,我们在 Linux 服务器上构建我们的 .NET Core 运行环境时,安装的是最新版本的 .NET Core Runtime,而部署的程序 .NET Core 版本则是 .NET Core 2.0(项目源码地址:https://github.com/Lanesra712/Danvic.PSU),因为并没有采取 Docker 部署的缘故,这里程序与运行环境的版本差异,可能导致我们的程序产生某些我们并不能复现的问题,所以,升级我们的程序就显得很有必要了。

      PS:如果你要在实际的生产项目升级你的 .NET Core 版本,慎重,慎重,再慎重!!!

     三、Step by Step

      1、修改我们的项目目标框架

      在更新 VS 2017 的过程中,我们的 .NET Core 版本也会进行更新,当然,如果你的电脑中没有安装 .NET Core 2.1 SDK,则需要你从官网上下载最新版的 SDK 进行安装。当我们已经安装好 .NET Core 2.1 SDK 后,就可以将我们原来程序的目标框架更改为 .NET Core 2.1。

      右键我们的项目,我们可以直接编辑 csproj 文件 或者通过打开属性选项进行可视化的修改。其实这里我们通过属性页面进行编辑实质上就是编辑我们的 csproj 文件。

      同时,为了保持我们的项目框架的一致性,我们需要将我们引用的类库的目标框架同样修改成 .NET Core 2.1。

      2、替换 Nuget 包引用

      在 .NET Core 2.1 版本中 微软将 Microsoft.AspNetCore.All 这个 .NET Core 的基础 DLL 更换成了 Microsoft.AspNetCore.App,因此,在更新了程序的目标框架后我们还需要将我们程序删除对于 Microsoft.AspNetCore.All 的引用,同时添加对于 Microsoft.AspNetCore.App 的引用。

      在 Microsoft.AspNetCore.App 中不包含了以下 Nuget package,如果你对于这些 package 有需要的话,你可以在项目中引用这些 package。

    Microsoft.AspNetCore.ApplicationInsights.HostingStartup
    Microsoft.AspNetCore.AzureAppServices.HostingStartup
    Microsoft.AspNetCore.AzureAppServicesIntegration
    Microsoft.AspNetCore.DataProtection.AzureKeyVault
    Microsoft.AspNetCore.DataProtection.AzureStorage
    Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv
    Microsoft.AspNetCore.SignalR.Redis
    Microsoft.Data.Sqlite
    Microsoft.Data.Sqlite.Core
    Microsoft.EntityFrameworkCore.Sqlite
    Microsoft.EntityFrameworkCore.Sqlite.Core
    Microsoft.Extensions.Caching.Redis
    Microsoft.Extensions.Configuration.AzureKeyVault
    Microsoft.Extensions.Logging.AzureAppServices
    Microsoft.VisualStudio.Web.BrowserLink

      在引用 Microsoft.AspNetCore.App 的时候,可能会提示缺少某些依赖项或者提示我们原来引用的 Nuget 包版本不满足 Microsoft.AspNetCore.App,我们只需要根据提示的错误信息将我们缺少的依赖项添加上或者将不满足要求的版本升级就可以了。

      例如我在升级 PSU.EFCore 这个类库中时,发现引用的程序集版本不满足我们我们使用 2.1.6 版本的 Microsoft.AspNetCore.App ,我们只需要将这些引用的 DLL 进行升级,再安装我们最新版本的 Microsoft.AspNetCore.App。

      在安装 .NET Core 2.1 SDK 之后,下列的 tools 已经被包含在最新版本的 .NET Core CLI 中,因此,我们可以在 csproj 文件中删除 DotNetCliToolReference 节点下的这些引用的 Nuget 包。

    Microsoft.DotNet.Watcher.Tools (dotnet watch)
    Microsoft.EntityFrameworkCore.Tools.DotNet (dotnet ef)
    Microsoft.Extensions.Caching.SqlConfig.Tools (dotnet sql-cache)
    Microsoft.Extensions.SecretManager.Tools (dotnet user-secrets)

      对于 DotNetCliToolReference 节点下的 dotnet-aspnet-codegenerator(用于生成 MVC中的 controllers 和 views 模板) Nuget 包,你同样可以选择删除这个引用,同时使用全局安装 tool 来代替它。

    dotnet tool install -g dotnet-aspnet-codegenerator

      3、基于 ASP.NET Core 2.1 代码惯例的更改

      在 .NET Core 升级到 2.1 版本后,ASP.NET Core 相应的也进行了一些更新,我们创建的模板中的一些基础代码也进行了修改。例如在下面示例中,我们使用 .NET Core 2.0 版本创建的 MVC 项目中的 Program.cs 代码结构与使用 .NET Core 2.1 生成的模板代码是有一定差异的。

    //ASP.NET Core 2.0
    namespace WebApp1
    {
        public class Program
        {
            public static void Main(string[] args)
            {
                BuildWebHost(args).Run();
            }
    
            public static IWebHost BuildWebHost(string[] args) =>
                WebHost.CreateDefaultBuilder(args)
                    .UseStartup<Startup>()
                    .Build();
        }
    }
    //ASP.NET Core 2.1
    namespace WebApp1
    {
        public class Program
        {
            public static void Main(string[] args)
            {
                CreateWebHostBuilder(args).Build().Run();
            }
    
            public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
                WebHost.CreateDefaultBuilder(args)
                    .UseStartup<Startup>();
        }
    }

      这里我们按照最新版本的模板代码对我们的 Program.cs 代码结构进行修改。

      同样的,在 Startup.cs 文件中,ASP.NET Core 2.1 版本增加了对于 GDPR 的支持(欧盟的一项政策,当我们需要收集用户的数据时,必须以「简洁、透明且易懂的形式,清晰和平白的语言」向用户说明,例如这里我们使用了 cookie、session 来存储用户的数据,我们就需要提前告知用户),对于 HTTPS 的重定向支持以及增加了 SetCompatibilityVersion 方法允许应用程序选择加入或退出ASP.NET MVC Core 2.1+中引入的可能中断的行为更改(嗯,看了一圈还是不明白到底是干什么的)。

      4、其它修改

      在 ASP.NET Core MVC 框架版本的更新中,同样对于引用的一些 JS 类库进行了升级,这里我就不升级了,主要为我们的程序添加对于 GDPR 政策的提示。以及要求我们的程序以 HTTPS 的形式进行访问。

      首先我们创建一个分布视图 _CookieConsentPartial 用来提示我们需要收集用户的信息,在 SecretController 控制器中添加一个 Action 用来显示我们的隐私政策,同时在我们的模板页面中引用创建的分布视图,这里的样式就不做任何的调整了,只是做个示例。

    @using Microsoft.AspNetCore.Http.Features
    
    @{
        var consentFeature = Context.Features.Get<ITrackingConsentFeature>();
        var showBanner = !consentFeature?.CanTrack ?? false;
        var cookieString = consentFeature?.CreateConsentCookie();
    }
    
    @if (showBanner)
    {
        <nav id="cookieConsent" class="navbar navbar-default navbar-fixed-top" role="alert">
            <div class="container">
                <div class="navbar-header">
                    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#cookieConsent .navbar-collapse">
                        <span class="sr-only">Toggle cookie consent banner</span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                    </button>
                    <span class="navbar-brand"><span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span></span>
                </div>
                <div class="collapse navbar-collapse">
                    <p class="navbar-text">
                        Use this space to summarize your privacy and cookie use policy.
                    </p>
                    <div class="navbar-right">
                        <a asp-controller="Secret" asp-action="Privacy" class="btn btn-info navbar-btn">Learn More</a>
                        <button type="button" class="btn btn-default navbar-btn" data-cookie-string="@cookieString">Accept</button>
                    </div>
                </div>
            </div>
        </nav>
        <script>
            (function () {
                document.querySelector("#cookieConsent button[data-cookie-string]").addEventListener("click", function (el) {
                    document.cookie = el.target.dataset.cookieString;
                    document.querySelector("#cookieConsent").classList.add("hidden");
                }, false);
            })();
        </script>
    }
    //在网站的首页(登录页面)中引用分布视图
    <partial name="_CookieConsentPartial" />
    /// <summary>
    /// 隐私政策
    /// </summary>
    /// <returns></returns>
    [AllowAnonymous]
    public IActionResult Privacy()
    {
        return View();
    }

      在之前的步骤中,我们在代码中支持了使用 HTTPS 请求访问,现在我们就可以启用 SSL 来使我们通过 HTTPS 请求来访问我们的项目。

     四、总结

       从 .NET Core 2.0 升级到 .NET Core 2.1的整个过程来看,项目整体改动不多,在发布项目时,我们可以发现,发布后的项目的大小缩小了很多,同时还提供了对于独立部署的支持,不用做过多的操作,就可以获得一些新的优秀特性,总的来说还是很值得升级的。

      注:

      1、依赖部署(FDD):项目依赖于目标服务器系统上的存在的系统级 .NET Core 环境,发布后的应用仅包含其自己的代码和其它位于 .NET Core 系统级库外的第三方依赖项。

      2、独立部署(SCD):发布后的项目需要包含发布后的程序所需要的全部组件(.NET Core 环境、第三方依赖项、程序代码),不依赖于目标服务器系统上的 .NET Core 环境。

    posted on 2019-01-30 10:17 NET未来之路 阅读(...) 评论(...) 编辑 收藏

    转载于:https://www.cnblogs.com/lonelyxmas/p/10336940.html

    展开全文
  • ASP.NET CORE系列【一】搭建ASP.NET CORE项目 原文:ASP.NET CORE系列【一】搭建ASP.NET CORE项目为什么要使用 ASP.NET Core? NET Core 刚发布的时候根据介绍就有点心里痒痒,微软的尿性都懂的,新...
    原文:ASP.NET CORE系列【一】搭建ASP.NET CORE项目

    为什么要使用 ASP.NET Core?

    NET Core 刚发布的时候根据介绍就有点心里痒痒,微软的尿性都懂的,新东西bug太多,现在2.0也发布很久了,决定研究一下。

    ASP.NET Core官方文档https://docs.microsoft.com/en-us/aspnet/core/getting-started

    ASP.NET Core 具有如下优点:

    • 生成 Web UI 和 Web API 的统一场景。
    • 集成新式客户端框架和开发工作流。
    • 基于环境的云就绪配置系统
    • 内置依赖项注入
    • 轻型的高性能模块化 HTTP 请求管道。
    • 能够在 IIS、Nginx、Apache、Docker 上进行托管或在自己的进程中进行自托管。
    • 定目标到 .NET Core 时,可以使用并行应用版本控制。
    • 简化新式 Web 开发的工具。
    • 能够在 Windows、macOS 和 Linux 进行生成和运行。
    • 开放源代码和以社区为中心

    相信很大一部分人因为Core的跨平台慕名而来!现在就开始折腾吧。

    新建项目

    新建项目,我们选择ASP.NET Core MVC, 最有趣的是Core继承了NG和React,等以后再来研究这些。

    现在专注我们的MVC

     

    项目结构

    新项目结构大体跟传统MVC区别不大, 依旧Model -View-Controllers

    所有的css images等文件放到wwwroot下面

     

     appsettings.json  

      在我们之前的Asp.net mvc 开发中,一提到配置文件,我们不由的想到 web.config 和 app.config,在 core 中,我们看到了很多的变化,新的配置系统显得更加轻量级,具有更好的扩展性,并且支持多样化的数据源。

      例如:连接字符串, 文件上传路径,等等....

     1 {
     2   "ConnectionStrings": {
     3     "DefaultConnection": "Data Source=.;database=NetCoreAdmin;uid=sa;pwd=123456;MultipleActiveResultSets=True;"
     4   },
     5   "Logging": {
     6     "LogLevel": {
     7       "Default": "Warning"
     8     }
     9   }
    10 }

     Startup.cs

      这是Mvc Core非常重要的地方, 包括加载配置, 通过依赖注入加载组件, 注册路由等都在此处进行

     

    Program.cs

    这里有一个非常熟悉的Main方法, 也就是应用的起点, 启动后通过UseStartup<Startup>()指定下文的Startup启动文件进行启动

    小结

    此时项目已经完成,运行之后,就能看到浏览器上面熟悉的Hellow Word!

    posted on 2018-06-19 09:57 NET未来之路 阅读(...) 评论(...) 编辑 收藏

    转载于:https://www.cnblogs.com/lonelyxmas/p/9197263.html

    展开全文
  • ASP.NET Core

    2016-11-28 20:33:32
    什么是 ASP.NET Core? ASP.NET Core 1.0 是一个开源跨平台的开发框架,用于构建基于云的现代 Web 应用 。它是从底层开始重新构建来提供性能优良的Web应用开发框架,可以部署在云上或者本地服务器上。另外,它使得 ...

空空如也

1 2 3 4 5 ... 20
收藏数 27,416
精华内容 10,966
关键字:

asp.net core