• 1.NET 4.6.1向.NET core 2.0项目迁移(HelloWorld篇)


    今天早上看到新闻,Microsoft都快要推出.NET5了,.NET core也3.0了,而我一直以来的项目都是.net 4.5+,包括WWF,WCF等技术框架,目前主流的基础框架都基本要求支持跨平台,容器化,所以.NET Core将是趋势,网上简单的查了下相关资料,.net core明确不支持wwf,wcf,因此迁移道路注定充满各种坑,接下来一一记录,以备翻查。

    1.开发环境的选择

    Visual Studio2017虽然功能强大,IDE各种图形化编辑,傻瓜式一键生成,但非常重,几个G,下装安装两小时以上。为了命令行运指如飞(装逼)的需要,选择一个轻量级的IDE是首要工作,同样作为微软出品,必属精品(作为一个微软系技术跟随者,此处拍下马屁)的Visual Studio Code,口碑爆棚,由Eric Gamma领导开发,说起这个大神,如果你不知道他的名字,那你绝对IT还没入门,作为GoF(Gang of Four四人帮)合著的设计模式是每个资深IT人必看的书籍(PS,其它大神如Anders hejlsberg/JeffreyRichter/Matin Fowler,如果你没看过他们的书,那都不好意思说混IT的,为大神打call)。不论是开发NODE.JS、前端Web、.NET Core,VS Code都能轻松搞定。

    下载安装后:

    和VS2017的差异如红色标注:

    最上面红色框是打开项目,不再是打开.csproj或.sln,而是直接打开文件夹,第二个标注的虫子图标是调试设置,后面再详细说说怎么用,第三个红色标注是插件安装(这也是VSCODE强大之处)。

    2.安装.NET Core SDK

    VS Code->Terminal->new Terminal(打开一个新的终端,相当于命令行窗口),

    输入dotnet -version,(默认输出是没有显示红色标识文字的,我本机已经装了2.2.105版本的sdk)

    因为没有安装sdk,所以不能执行创建MVC项目的命令,接下来去官网下载.net core sdk,

    https://dotnet.microsoft.com/download/dotnet-core(目前最新版3.0)注意要下载sdk,而不是runtime的,runtime顾名思义是用于运行时支持。我的电脑是windows 64位的,所以我选择红色标识的,你可以根据电脑操作系统选择对应版本安装下载(MAC OS上也支持得很好哦,其实我更喜欢在苹果电脑上开发,速度快,linux命令行天然支持,而且后面Docker of Mac也很容易跑起来)。

    3.创建ASP.net core MVC 项目

     一直以来,java、php、.net各自阵容开发人员互怼,其中.net最被人诟病的就是命令行支持,但其实一直以来我们是在IDE的便利下,系统帮我们做了大部份的命令行工作。幸运的是,是重拾命令行(开启装逼)模式的时候了:

    vs code终端下键入:dotnet new mvc -n HelloWorld

    File->Open Folder,打开创建的目录,我是在d:下执行的创建项目命令,所以打开d:HelloWorld目录:

    可以看到自动为我们创建了对应的目录和文件,相比.net 4.6项目结构,有较大差别,我们先从表面上看,有以下变化:

    • Program.cs,这是console或windows form程序入口呀,怎么Web网站也有这个文件了呢,其实看代码就明白了,是在入口处创建了web服务并开启监听http请求。
            public static void Main(string[] args)
            {
                CreateWebHostBuilder(args).Build().Run();
            }
    
            public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
                WebHost.CreateDefaultBuilder(args)
                    .UseStartup<Startup>();
        }
    
    •  appsettings.json,传统的web.config变成了这个,读取方式也变了,原来System.Configuration变成了Microsoft.Extensions.Configuration
    •    Content目录和Scripts目录变成了wwwroot,静态资源全放到这个里面了。
    •    代码大量用了DI的技术,这也不是啥新概念,老鸟一般都知道。

    4.增加控制器和视图

    用VS2017增加控制器和视图是非常简单的,直接项目上右键弹出菜单就可以增加,但vs code里必须命令行增加:

    dotnet aspnet-codegenerator controller -name MyController -actions -outDir Controllers

    百度一下,是要增加一个引用,直接选择Helloworld.csproj(项目文件在vs code里作为一个文件编辑), 在项目文件csproj中添加“ <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.4" />”引用,保存后再在终端里运行dotnet restore命令:

    可以看到自动为项目增加了几个关联的库。dotnet restore这个命令比较重要,它的作用就是将项目中引用的库自动从nuget中下载(补充一点:在用vs2017打开项目时,会自动执行这个动作,并将下载的组件下载到packages目录下,在使用svn或其它源码管理工具时,这个目录和bin、obj目录一样,是不需加入到源码控制的,不然因为只读锁定会在加入nuget 包时出现访问拒绝,许多新人不了解这个原理)

    错误说得很清楚了,csproj里要再加上一个包引用:

    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" />
    再次执行增加控制器的命令行,又出现新的错误了。
    D:HelloWorldHelloWorld.csproj : warning NU1604: 项目依赖项 Microsoft.VisualStudio.Web.CodeGeneration.Design 不具有包含下限。在依赖项版本
    中包含下限可确保一致的还原结果。
    D:HelloWorldHelloWorld.csproj : warning NU1701: 已使用“.NETFramework,Version=v4.6.1”而不是项目目标框架“.NETCoreApp,Version=v2.2”还原包“Microsoft.Composition 1.0.27”。此包可能与项目不完全兼容。
    D:HelloWorldHelloWorld.csproj : error NU1107: Microsoft.CodeAnalysis.CSharp 中检测到版本冲突。直接安装/引用 Microsoft.CodeAnalysis.CSharp 2.8.0 到项目 HelloWorld 可解决此问题。
    D:HelloWorldHelloWorld.csproj : error NU1107:  HelloWorld -> Microsoft.AspNetCore.App 2.2.0 -> Microsoft.CodeAnalysis.Razor 2.2.0 -> Microsoft.CodeAnalysis.CSharp (>= 2.8.0)
    D:HelloWorldHelloWorld.csproj : error NU1107:  HelloWorld -> Microsoft.VisualStudio.Web.CodeGeneration.Design 1.0.0 -> Microsoft.VisualStudio.Web.CodeGeneration.Utils 1.0.0 -> Microsoft.CodeAnalysis.CSharp.Workspaces 1.3.0 -> Microsoft.CodeAnalysis.CSharp (= 1.3.0).
      正在生成 MSBuild 文件 D:HelloWorldobjHelloWorld.csproj.nuget.g.props。
      D:HelloWorldHelloWorld.csproj 的还原在 18.14 sec 内失败。 
    想了想可能是版本不对,那刚加的这个包引用用啥呢,看提示上Microsoft.VisualStudio.Web.CodeGeneration.Design 1.0.0 是因为没有指定版本而默认用了1.0.0的版本,改成2.0.4版本(和codeGenerator.tools一致)试试,
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.0.4" />
    错误 依旧,依据提示是版本不对,改成和.AspNetCore.App的一致版本2.2.0之后,再dotnet restore,系统提示还原成功。
    再次执行增加控制器的命令:dotnet aspnet-codegenerator controller -name MyController -actions -outDir Controllers

    增加视图:dotnet aspnet-codegenerator view Create Create -m ErrorViewModel  -outDir views/My

    创建视图时,必须选择一个模型,这里我使用默认框架里的ErrorViewModel,另外上面命令行中有两个Create,第一个是视图名称,可以自已命名其它name,第二个为视图模板类型,可以为Empty/Create/Edit/Delete/Details/List六种类型之一。

    接下来,我们运行程序,也是命令行dotnet run,编绎器自动找到.csproj项目编绎运行,也可手动指定项目或解决方案。

    浏览器地址栏输入localhost:5000/my/create,刚加入的模板页面如下:

    至此,第一个aspnet.core网站成功启动,曲折的迈出了第一步。前路更精彩!

  • 相关阅读:
    织梦栏目判断 seotitle的小bug
    Python正课32 —— 函数参数的补充
    Python正课31 —— 函数参数的使用
    Python正课30 —— 函数的基本使用
    Python正课29 —— 文件修改
    Python正课28 —— f.seek的应用
    Python正课27 —— 文件高级操作:指针的移动
    Python正课26 —— 文件处理的补充
    javascript 中的时间戳转换时间 根据时间字符判断星期几 根据开始时间结束时间获取中间间隔时间 来自转发
    js获取url参数值的两种方式
  • 原文地址:https://www.cnblogs.com/coolalam/p/10824557.html
Copyright © 2020-2023  润新知