ASP.NET vNext(Project K/KVM/KPM/KRE/KLR) VS14 CTP3もろもろ

[2014年10月追記]CPT4

  • CTP4についてメモ
    • KPM
      • ProgramFileやキャッシュを使って、毎回MyGetからとりにいかなくなりました。
      • 少しずつパフォーマンス改善されてます。
      • System.*はKPMではなく、KREからとるようにかわりました。
      • C:\Program Files (x86)\Microsoft Web Tools\Kpm
      • C:\Program Files (x86)\Microsoft Web Tools\Kre
    • パッケージ
      • 従来のパッケージ(EntityFramework6)
      • C:\Program Files (x86)\Microsoft Web Tools\Packages
      • KPM用パッケージ(EntityFramework7)
      • C:\Program Files (x86)\Microsoft Web Tools\Kpm
    • KREのパッケージ構造

C:\Program Files (x86)\Microsoft Web Tools\Kre>tree
Folder PATH listing
C:.
├───KRE-CLR-amd64.1.0.0-alpha4
│ └───bin
│ └───lib
│ ├───Microsoft.Framework.DesignTimeHost
│ ├───Microsoft.Framework.PackageManager
│ └───Microsoft.Framework.Project
├───KRE-CLR-x86.1.0.0-alpha4
│ └───bin
│ └───lib
│ ├───Microsoft.Framework.DesignTimeHost
│ ├───Microsoft.Framework.PackageManager
│ └───Microsoft.Framework.Project
├───KRE-CoreCLR-amd64.1.0.0-alpha4
│ └───bin
│ └───lib
│ ├───Microsoft.Framework.DesignTimeHost
│ ├───Microsoft.Framework.PackageManager
│ └───Microsoft.Framework.Project
├───KRE-CoreCLR-x86.1.0.0-alpha4
│ └───bin
│ └───lib
│ ├───Microsoft.Framework.DesignTimeHost
│ ├───Microsoft.Framework.PackageManager
│ └───Microsoft.Framework.Project
└───KRE-Mono.1.0.0-alpha4
└───bin
└───lib
├───Microsoft.Framework.DesignTimeHost
├───Microsoft.Framework.PackageManager
└───Microsoft.Framework.Project

    • Frameworkの名前
      • K10はaspnetcore50に、.NET45はaspnet50に変更。
      • サンプルを見ていると、.NET45と共存している場所もあったので、asp.net系のDLLのサブセットという意味合いになったよう。
  • 以下はついでメモ
    • DI
      • なんとなく見ていたら、DIを独自実装ではなく、UnityやNinjectといったライブラリを使う仕組みのようです。
    • xUnit.NET
      • K.Runner部分はASP.NETGitHubで作っている。k testという形で呼び出す。
    • ローカルIISやAzureへのデプロイは、
      • kpm pack --runtime KRE-CoreCLR-x86.1.0.0-beta1-10577
      • kpm pack --runtime KRE-CLR-x86.1.0.0-alpah4
      • IISでは、wwwrootを物理フォルダに設定
    • KPMのキャッシュの場所
      • C:\Users\aoki\AppData\Local\kpm\cache
    • VS14の設定
      • C:\Users\aoki\AppData\Local\Microsoft\VisualStudio\14.0
      • KRuntimeは「KRuntime.sdf」がある

以下元ブログ記事


以前会社の勉強会ASP.NET vNextについて発表した時の資料です。

CTP3の時に書いたメモ

この時はVisual Studio 14 CTP2でしたが、現在はCTP3が出ています。


ちらっとのぞいてみたところ、CTP2の時は各プロジェクトのPackagesフォルダにアセンブリが配置されていましたが、CTP3では、プロジェクト配下のPackagesフォルダが無くなり、%HOMEPATH%.KPM に集約されてすっきりしてました。


以下は気になったことの自分メモです

  • ちなみに、対象とするフレームワークの設定で、Core(K)を選んだときに保存される場所は、*.kprojではなく、*.kproj.userファイル(以下のイメージ)。実行時にどちらでも動くから「開発者の環境に依存するもの」という位置づけなんですかね。ちょっと違和感あり。
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <ActiveTargetFramework>K,Version=v1.0</ActiveTargetFramework>
  </PropertyGroup>
</Project>
  • *.kprojも変更あり。
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">12.0</VisualStudioVersion>
    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
  </PropertyGroup>
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
  </PropertyGroup>
  <Import Project="$(VSToolsPath)\AspNet\Microsoft.Web.AspNet.Props" Condition="'$(VSToolsPath)' != ''" />
  <PropertyGroup Label="Globals">
    <ProjectGuid>5613d12f-75e6-49d1-8a94-e1fed866c926</ProjectGuid>
    <OutputType>Web</OutputType>
    <RootNamespace>WebApplication2</RootNamespace>
  </PropertyGroup>
  <PropertyGroup Condition="$(OutputType) == 'Console'">
    <DebuggerFlavor>ConsoleDebugger</DebuggerFlavor>
  </PropertyGroup>
  <PropertyGroup Condition="$(OutputType) == 'Web'">
    <DebuggerFlavor>WebDebugger</DebuggerFlavor>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'" Label="Configuration">
  </PropertyGroup>
  <PropertyGroup>
    <SchemaVersion>2.0</SchemaVersion>
    <DevelopmentServerPort>49214</DevelopmentServerPort>
  </PropertyGroup>
  <Import Project="$(VSToolsPath)\AspNet\Microsoft.Web.AspNet.targets" Condition="'$(VSToolsPath)' != ''" />
</Project>
  • project.jsonの中身
    • プロジェクトファイルの代わりにproject.jsonに含めるコードを書けるようになった。
      • 含めるコードは「"code": "**\\*.cs;..\\Shared\\*.cs"」、除外コード「"exclude": "buggy/**/*.cs"」、リソースファイル「 "resources": "embed/**/*.*"」のイメージ
    • configurationsで、コンパイラに与える指示でDebug、Release以外の指定が可能に。(デフォルトでこの2つは指定済み)
      • ちなみにRoslynに与える指示は"compilationOptions"で指定
    • ビルドイベントを「scripts」で設定できるように。ビルド前後、パッケージング前後、パッケージ展開前後のアクションを記載
      • プロジェクトディレクトリ「%project:Directory% 」、プロジェクト名「%project:Name%」、プロジェクトバージョン「%project:Version%」の変数を指定可能
    • アセンブリやプロジェクトの参照は、dependenciesに記載。
      • フレームワークによって依存する内容やバージョンが違う場合は、"frameworks" で指定
    • frameworksの指定は、net45かk10
{
  "version": "0.1-alpha-*",
  "compilationOptions": {
    "warningsAsErrors": true
  },
  "dependencies": {
    "Microsoft.Bcl.Immutable": "1.1.18-beta-*",
    "Microsoft.AspNet.ConfigurationModel": "0.1-alpha-*",
    "Microsoft.AspNet.DependencyInjection": "0.1-alpha-*",
    "Microsoft.AspNet.Logging": "0.1-alpha-*",
    "System.Data.Common": "0.1-alpha-*"
  },
    "scripts": {
        "prebuild": "echo before building",
        "postbuild": "echo after building",
        "prepack": "echo before packing",
        "postpack": "echo after packing",
        "prerestore": "echo before restoring packages",
        "postrestore": "echo after restoring packages"
    },
  "code": "**\\*.cs;..\\Shared\\*.cs",
  "configurations": {
    "Debug": {
      "compilationOptions": {
        "define": ["DEBUG", "TRACE"],
        "debugSymbols": "full"
      }
    },
    "Release": {
      "compilationOptions": {
        "define": ["RELEASE", "TRACE"],
        "optimize": true,
        "debugSymbols": "pdbOnly"
      }
    }
  },
  "frameworks": {
    "net45": {
      "dependencies": {
        "System.Runtime": "",
        "System.Collections": ""
      }
    },
    "k10": {
      "dependencies": {
        "System.Collections": "4.0.0.0",
        "System.Collections.Concurrent": "4.0.0.0",
        "System.ComponentModel": "4.0.0.0",
        "System.Console": "4.0.0.0",
        "System.Diagnostics.Contracts": "4.0.0.0",
        "System.Diagnostics.Debug": "4.0.10.0",
        "System.Globalization": "4.0.10.0",
        "System.Linq": "4.0.0.0",
        "System.Linq.Expressions": "4.0.0.0",
        "System.Linq.Queryable": "4.0.0.0",
        "System.Reflection": "4.0.10.0",
        "System.Reflection.Extensions": "4.0.0.0",
        "System.Resources.ResourceManager": "4.0.0.0",
        "System.Runtime": "4.0.20.0",
        "System.Runtime.Extensions": "4.0.10.0",
        "System.Threading": "4.0.0.0",
        "System.Threading.Tasks": "4.0.10.0"
      }
    }
  }
}
  • MyGetのURLを設定する場所は、*.slnと同じ場所のNuget.config。
    • Nuget.configなければ作る。デフォルトはaspnetrelease。aspnetmaster(Masterブランチ?)とaspnetvnext(開発中リポジトリ.DEVブランチ?)も指定できる。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <!--<add key="AspNetVNext" value="https://www.myget.org/F/aspnetrelease/api/v2" />-->
    <!--<add key="AspNetVNext" value="https://www.myget.org/F/aspnetmaster/api/v2" />-->
    <add key="AspNetVNext" value="https://www.myget.org/F/aspnetvnext/api/v2" />
    <add key="NuGet.org" value="https://nuget.org/api/v2/" />
  </packageSources>
</configuration>

参考資料