close
文章出處

前言

關于 .NET Core 舊版本的 sdk 介紹可以參看我以前的 這篇 文章。

8 個小時前,.NET Core 項目組釋放了 .NET Core 新一輪的 sdk 工具更新,即 RC4 版本 ,這個版本也就是意味著基本功能已經確定了,下個版本應該就是RTM版了,會隨著 Visual Studio 2017 正式版釋放出來。

眾所周知,從Tools RC3 版本開始,微軟已經拋棄了原來的 project.json 改為了 MSBuild 工具進行項目文件格式,這么做有好有壞,我想很大原因是為了兼容以前的項目吧。

不管喜不喜歡以前的 MSBuild 這個風格,都已經是事實了,所以還是先提前了解一下最新的SDK 內容比較實際點吧。

從 project.json 遷移到 MSBuild

很簡單,只需要下載最近版本的 Visual Studio 2017 RC版,然后會幫你自動遷移。

MSBuild(Microsoft Build Engine),它代表微軟Visual Studio 的項目構建工具,這是一種基于 XML 的文件格式。

RC4 SDK 的一些改進和更改

比起以前的 sdk dotnet 命令,新的 sdk 最大的改進就是關于腳手架的一些工作,首先就是 dotnet new 命令。

dotnet new

在使用 dotnet new 命令后,不會默認創建一個控制臺 Hello World 程序,而是會顯示以下。

根據提示可以看到,需要制定相應的模板類型名稱,這個改進我認為是非常不錯了,也就是當使用非 Visual Studio 開發工具時,我們可以和容易的創建一個模板程序,而不用從頭開始。 這和使用 Yeoman 非常像,并且方便。

還有一個特點是,模板并不是一成不變的,它具有更新功能,并且具有可擴展性,任何人都可以編寫自己的模板使用 dotnet new 命令,當前目前的 dotnet new 還不具備上述的一些功能,微軟會在后面的幾個月完善它。

在使用 dotnet new創建一個程序的時候,除了指定模板類型外,還可以指定需要使用的框架。

dotnet new console -f 框架名

或者可以使用 dotnet new console --help 來查看本機都安裝了哪些框架。

project.json vs MSBuild

下面是兩個分別使用 以前的 project.json 方式和新的 msbuild 方式創建的兩個MVC項目,然后來看看他們項目文件之間的區別。

project.json

{
  "userSecretsId": "aspnet-WebApplication-0799fe3e-6eaf-4c5f-b40e-7c6bfd5dfa9a",

  "dependencies": {
    "Microsoft.NETCore.App": {
      "version": "1.1.0-preview1-001153-00",
      "type": "platform"
    },
    "Microsoft.AspNetCore.Authentication.Cookies": "1.0.0",
    "Microsoft.AspNetCore.Diagnostics": "1.0.0",
    "Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore": "1.0.0",
    "Microsoft.AspNetCore.Identity.EntityFrameworkCore": "1.0.0",
    "Microsoft.AspNetCore.Mvc": "1.0.1",
    "Microsoft.AspNetCore.Razor.Tools": {
      "version": "1.0.0-preview2-final",
      "type": "build"
    },
    "Microsoft.AspNetCore.Routing": "1.0.1",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.1",
    "Microsoft.AspNetCore.StaticFiles": "1.0.0",
    "Microsoft.EntityFrameworkCore.Sqlite": "1.0.1",
    "Microsoft.EntityFrameworkCore.Tools": {
      "version": "1.0.0-preview2-final",
      "type": "build"
    },
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
    "Microsoft.Extensions.Configuration.Json": "1.0.0",
    "Microsoft.Extensions.Configuration.UserSecrets": "1.0.0",
    "Microsoft.Extensions.Logging": "1.0.0",
    "Microsoft.Extensions.Logging.Console": "1.0.0",
    "Microsoft.Extensions.Logging.Debug": "1.0.0",
    "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0",
    "Microsoft.VisualStudio.Web.CodeGeneration.Tools": {
      "version": "1.0.0-preview2-update1",
      "type": "build"
    },
    "Microsoft.VisualStudio.Web.CodeGenerators.Mvc": {
      "version": "1.0.0-preview2-update1",
      "type": "build"
    }
  },

  "tools": {
    "Microsoft.AspNetCore.Razor.Tools": {
      "version": "1.0.0-preview2-final",
      "imports": "portable-net45+win8+dnxcore50"
    },
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": {
      "version": "1.0.0-preview2-final",
      "imports": "portable-net45+win8+dnxcore50"
    },
    "Microsoft.EntityFrameworkCore.Tools": {
      "version": "1.0.0-preview2-final",
      "imports": [
        "portable-net45+win8+dnxcore50",
        "portable-net45+win8"
      ]
    },
    "Microsoft.Extensions.SecretManager.Tools": {
      "version": "1.0.0-preview2-final",
      "imports": "portable-net45+win8+dnxcore50"
    },
    "Microsoft.VisualStudio.Web.CodeGeneration.Tools": {
      "version": "1.0.0-preview2-final",
      "imports": [
        "portable-net45+win8+dnxcore50",
        "portable-net45+win8"
      ]
    }
  },

  "frameworks": {
    "netcoreapp1.1": {
      "imports": [
        "dotnet5.6",
        "dnxcore50",
        "portable-net45+win8"
      ]
    }
  },

  "buildOptions": {
    "debugType": "portable",
    "emitEntryPoint": true,
    "preserveCompilationContext": true
  },

  "runtimeOptions": {
    "configProperties": {
      "System.GC.Server": true
    }
  },

  "publishOptions": {
    "include": [
      "wwwroot",
      "**/*.cshtml",
      "appsettings.json",
      "web.config"
    ]
  },

  "scripts": {
    "prepublish": [ "npm install", "bower install", "gulp clean", "gulp min" ],
    "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
  },

  "tooling": {
    "defaultNamespace": "WebApplication"
  }
}

msbuild

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp1.0</TargetFramework>
    <UserSecretsId>aspnet-test-A18C8943-54AF-4FC4-A73D-6130613B8C7C</UserSecretsId>
  </PropertyGroup>

  <ItemGroup>
    <None Update="test.db" CopyToOutputDirectory="CopyIfNewer" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore" Version="1.0.3" />
    <PackageReference Include="Microsoft.AspNetCore.Authentication.Cookies" Version="1.0.1" />
    <PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="1.0.1" />
    <PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="1.0.1" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.0.2" />
    <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="1.0.1" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="1.0.2" PrivateAssets="All" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="1.0.2" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Design" Version="1.0.2" PrivateAssets="All" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="1.0.0-msbuild3-final" PrivateAssets="All" />
    <PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="1.0.1" />
    <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="1.0.1" />
    <PackageReference Include="Microsoft.VisualStudio.Web.BrowserLink" Version="1.0.1" />
  </ItemGroup>
</Project>

可以看出,兩者的區別還是蠻大的。

其他

關于 RC4 Tools 其他 sdk 命令,和以前的沒多大區別,創建一個項目并運行的基本的流程仍然是


dotnet new console

dotnet restore

dotnet build

dotnet run

本文地址:http://www.cnblogs.com/savorboard/p/dotnetcore-msbuild-sdk.html
作者博客:Savorboard
歡迎轉載,請在明顯位置給出出處及鏈接


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜

    AutoPoster 發表在 痞客邦 留言(0) 人氣()