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

摘要:
今天早上我看到了微软即将推出的消息。NET5和。NETcore也是3.0。我的项目一直都是。net4.5+,包括WWF、WCF和其他技术框架。目前,主流的基本框架基本上需要支持跨平台和容器化,因此NETCore将是趋势。我只是在网上查了一下相关信息。netcore显然不支持wwf和wcf。因此,迁移路径注定充满陷阱。接下来,我将逐一记录下来,以供将来参考。无论是开发NODEJS、前端Web还是。NETCore、VSCode可以轻松处理。D: HelloWorldHelloWorld.csproj:warningNU1604:项目依赖关系Microsoft.VisualStudio.Web.CodeGeneration.Design没有包含下限。D: HelloWorldHelloWorld.csproj:warningNU1701:使用了还原包“Microsoft.Composition1.0.27”,而不是项目目标框架“.NETCoreApp,Version=v2.2”。D:HelloWorldHelloWorld.csproj:errorNU1107:在Microsoft.CodeAnalysis.CSharp中检测到版本冲突。

今天早上看到新闻,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都能轻松搞定。

下载安装后:

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

和VS2017的差异如红色标注:

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

2.安装.NET Core SDK

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

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

1.NET 4.6.1向.NET core 2.0项目迁移(HelloWorld篇)第2张

因为没有安装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也很容易跑起来)。

1.NET 4.6.1向.NET core 2.0项目迁移(HelloWorld篇)第3张

3.创建ASP.net core MVC 项目

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

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

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

1.NET 4.6.1向.NET core 2.0项目迁移(HelloWorld篇)第4张

可以看到自动为我们创建了对应的目录和文件,相比.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

1.NET 4.6.1向.NET core 2.0项目迁移(HelloWorld篇)第5张

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

1.NET 4.6.1向.NET core 2.0项目迁移(HelloWorld篇)第6张

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

1.NET 4.6.1向.NET core 2.0项目迁移(HelloWorld篇)第7张

错误说得很清楚了,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
1.NET 4.6.1向.NET core 2.0项目迁移(HelloWorld篇)第8张

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

1.NET 4.6.1向.NET core 2.0项目迁移(HelloWorld篇)第9张

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

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

1.NET 4.6.1向.NET core 2.0项目迁移(HelloWorld篇)第10张

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

1.NET 4.6.1向.NET core 2.0项目迁移(HelloWorld篇)第11张

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

免责声明:文章转载自《1.NET 4.6.1向.NET core 2.0项目迁移(HelloWorld篇)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Linux的网卡由eth0变成了eth1html中radio,checkbox值的获取、赋值、注册事件下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

vscode安装设置go

vscode安装设置go vscode安装go配置 1、下载最新的vscode:https://code.visualstudio.com/docs/?dv=win 2、下载go:https://golang.org/dl/ 3、配置go的环境变量: [计算机]-->[属性]-->[高级系统设置]-->[环境变量]-->[新建]...

VSCode设置中文语言显示

Vscode是一款开源的跨平台编辑器。默认情况下,vscode使用的语言为英文(us),如何将其显示语言修改成中文了? 1:打开vscode工具; 2:使用快捷键组合【Ctrl+Shift+p】,在搜索框中输入“configure display language”,点击确定后; 3:Ctrl+Shift+p之后输入 "config" 筛选可用命令列表,修...

vscode之.netcore的初学者使用和配置(一)

一,VsCode之.netcore的使用,我们去官网下载软件包,https://code.visualstudio.com/Download  二,下载好,安装一直下一步默认即可,安装好了,我们看看vscode的界面,打开一个我们的项目,跟vs有区别,这里我们是选择文件夹,而不是解决方案,如下,我的项目:  四,由于我的是.nercore,我们需要去安...

Win7 VSCode 在线安装Rust语言及环境配置

睡前彻底解决在VSCode中,按F12不跳转到标准库源码的问题。 首先,如果装过离线版,卸载掉。 然后去官网下载 rustup-init.exe https://www.rust-lang.org/tools/install 下好后别急着安装 新建4个环境变量 CARGO_HOMEE:Rustcargo RUSTUP_HOMEE:Rust ustup RU...

VSCode插件开发全攻略(四)命令、菜单、快捷键

更多文章请戳VSCode插件开发全攻略系列目录导航。 命令 我们在前面HelloWord章节中已经提到了命令写法,这里再重温一下。 context.subscriptions.push(vscode.commands.registerCommand('extension.sayHello', () => { vscode.window.sho...

VSCode插件集+相关配置

vscode 插件: themes and icons:Material IconsMaterial Icon ThemeCommunity Material ThemeMaterial ThemeVisual Studio Blue ThemeVisual Studio Light1 themeGitHub ThemeAtom One Dark Them...