Azure Storage Emulatorのインストールエラー(CAQuietExec Failed 1603)
申し訳ございません。次の製品をインストールできませんでした。
Microsoft Azure strage Emulator - 3.4 この製品は正常にインストールされませんでした。
Windows Azure Storage Emulator - v3.4、製品バージョン: 3.4.6848.0、製品の言語: 1033、製造元: Microsoft Corporation、インストールの成功またはエラーの状態: 1603
というインストールエラーが出た場合の対策のメモです。
にとても良くまとめられています。
私の環境でも「C:\users\<ユーザー名>\*.mdf と *.ldf」を移動後、コマンドプロンプトから
sqllocaldb stop v11.0
sqllocaldb delete v11.0
sqllocaldb create v11.0
とやったものの相変わらず、以下のエラーでした。
CAQuietExec: Windows Azure Storage Emulator 3.4.0.0 command line tool
CAQuietExec: Error: Cannot create database.
CAQuietExec: Error 0xfffffff3: Command line returned an error.
CAQuietExec: Error 0xfffffff3: CAQuietExec Failed
CustomAction RunInitialize returned actual error code 1603 (note this may not be 100% accurate if translation happened inside sandbox)
困っていたところ、
http://stackoverflow.com/questions/23307477/azure-storage-emulator-wont-install
に、
sqllocaldb stop MSSQLLocalDB
sqllocaldb delete MSSQLLocalDB
sqllocaldb create MSSQLLocalDB
という記載がありました。
同じく、こちらも実行したところ、Windows Azure Storage Emulatorを正常にインストールできました。
拡張メソッドのライブラリ一覧(C#)
OSSのC#の拡張メソッドのライブラリを調べたメモです。
たくさんありつつも、デファクトスタンダートといったものはない印象です。
- .NET Extensions Methods Library for C# and VB.NET
- http://dnpextensions.codeplex.com/
- https://www.nuget.org/packages/PGK.Extensions/2011.6.0
- ボリュームがある。メジャーだが最終更新が2011年
- ZZZ Project
- https://github.com/zzzprojects/Z.ExtensionMethods
- ボリュームがある。キャッシュ系がある。今もアクティブ
- Extension Overflow
- http://extensionoverflow.codeplex.com/
- StackOverFlowで集めたもの
- .NET Extension Methods Library
- NETFx
- BCL.Extension
- サンプルサイト
ASP.NET5(C#)をCoreOSのDockerで動かす
ASP.NET5の「1.0.0-beta4」を、AzureのCoreOSのDcokerで動かす手順をメモりました。
ASP.NET vNextのDocker
https://github.com/aspnet/aspnet-docker
https://registry.hub.docker.com/u/microsoft/aspnet/
AzureでCoreを作成
Dockerを使うためにCoreOSを使用します。
Azureでインスタンスを作るには、ギャラリーからCoreOSのStableを選択するだけです。
ASP.NETアプリを外からつながせたい場合はエンドポイントでHTTPを追加します。
CoreOSでは、DockerもGitも使える状態になっています。
Linux(CoreOS)にSSHクライアントから接続
プロビジョニングが終わったら、PuttyなどのSSHクライアントで繋ぎます。
#ホームへ cd # 作業フォルダを作って移動 mkdir aspnet cd aspnet # ASP.NETのサンプルをGitから取得 git clone git://github.com/aspnet/Home.git # 今回のデプロイ用のDockerの設定ファイルを作成 vim Dockerfile
Dockerファイルの編集
Dockerfileをvimエディタで作成し、以下の内容で保存します。(保存はESCキー後の、ZZ、終了は:q!)
FROM microsoft/aspnet:1.0.0-beta4 ADD ./Home/samples/1.0.0-beta4 /app WORKDIR /app/HelloWeb RUN ["dnu", "restore"] EXPOSE 5004 ENTRYPOINT ["dnx", ".", "kestrel"]
- Dockerfileの説明
- 注意点
- ASP.NET5の概念は、こちらの記事のP3とP4を読んでください。
- kpm が dnu にリネーム
- kvm が dnvm にリネーム
- k が dnx にリネーム
- kprojがxprojにリネーム
- サンプルのlatestが動かず、1.0.0-beta4は動くという罠があります。
- ASP.NET5の概念は、こちらの記事のP3とP4を読んでください。
この時点でのファイル構造(関係ないところは省略)
/home/aoki/aspnet
--Dockerfile --Home --.gitattributes --.gitignore --CONTRIBUTING.md --GettingStartedDeb.md --Home.sln --LICENSE.txt --README.md --dnvm.cmd --dnvm.ps1 --dnvm.sh --dnvminstall.ps1 --dnvminstall.sh --samples --1.0.0-beta4 --HelloWeb --HelloWeb.xproj --Properties --launchSettings.json --Startup.cs --project.json --wwwroot --image.jpg --NuGet.Config
Dockerイメージ作成
Dockerイメージを作成します。
sudo docker build -t aspnetvnext .
しばらく待ちます。dnu restoreコマンドでアセンブリの取得をするので、時間がかかります。
実行結果
Sending build context to Docker daemon 2.177 MB
Sending build context to Docker daemon
Step 0 : FROM microsoft/aspnet:1.0.0-beta4
---> 94b7c4941bccStep 1 : ADD ./Home/samples/1.0.0-beta4 /app
---> 7577bcb65df0
Removing intermediate container dfdf4ce1d496Step 2 : WORKDIR /app/HelloWeb
---> Running in 5c965567463e
---> c2445e98ce6b
Removing intermediate container 5c965567463eStep 3 : RUN dnu restore
---> Running in 84f4580847b8
Restoring packages for /app/HelloWeb/project.json
GET https://www.myget.org/F/aspnetvnext/api/v2/FindPackagesById()?Id='Kestrel'.
GET https://nuget.org/api/v2/FindPackagesById()?Id='Kestrel'.
(省略)
OK https://www.myget.org/F/aspnetvnext/api/v2/package/System.Security.Cryptography.Hashing/4.0.0-beta-22907 643ms
(省略)
Installing System.Security.Cryptography.Hashing 4.0.0-beta-22907
Writing lock file /app/HelloWeb/project.lock.json
Restore complete, 565334ms elapsed
---> c08b36d2b243
Removing intermediate container 84f4580847b8Step 4 : EXPOSE 5004
---> Running in 9c7ee0026d35
---> 6a7785a4718d
Removing intermediate container 9c7ee0026d35Step 5 : ENTRYPOINT dnx . kestrel
---> Running in b092448c2d29
---> fbc1a2b1c89a
Removing intermediate container b092448c2d29
Successfully built fbc1a2b1c89a
STEP順に実行されます。
(以前と異なり、project.jsonだけではなく、project.lock.jsonなるものが生成されていました。人が触らないファイルのように見えます。)
Dockerイメージの確認
sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
aspnetvnext latest fbc1a2b1c89a 11 minutes ago 778.7 MB
aspnetvnextという名前のDockerイメージができています。
Dockerコンテナに配置
Dockerのrunコマンドで、コンテナに配置します。
sudo docker run -t -p 80:5004 aspnetvnext
ポート5004を80に割り当てて実行。
エラーがあれば表示されます。
sudo docker ps -a
上記コマンドで実行できてているDockerコンテナを確認します。
正常起動した場合は
sudo docker stop <コンテナID>
で停止できます。
エラーがなければ、Dockerを-d(デーモン)オプションを付けてサービス実行します。(こちらは、エラーがあっても気づきません。)
sudo docker run -t -d -p 80:5004 aspnetvnext
ASP.NET MVC 5実践プログラミング
「ASP.NET MVC 5実践プログラミング」を読みました。
この本は、ASP.NET MVCを学ぶ上で最良の一冊です。
ASP.NET MVCは、昨今のMicrosoft Web技術のメインストリームといえる技術で、最新はバージョン5です。
Webにも多くの情報がありますが、最新のASP.NET MVCを効率的に学びたいときは、この本を読むことをお勧めします。
- 作者: 山田祥寛
- 出版社/メーカー: 秀和システム
- 発売日: 2014/09/22
- メディア: 単行本
- この商品を含むブログ (4件) を見る
簡単なサンプルから始まり、徐々に理解を深めることができます。
そして、Razorの一つ一つの構文や説明も細かく書いています。
ASP.NETを活用して、素敵なサイトを作りたい方におすすめの一冊です。
ASP.NET vNext(Project K/KVM/KPM/KRE/KLR) VS14 CTP3もろもろ
[2014年10月追記]CPT4
- CTP4についてメモ
- 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
CTP3の時に書いたメモ
この時はVisual Studio 14 CTP2でしたが、現在はCTP3が出ています。
ちらっとのぞいてみたところ、CTP2の時は各プロジェクトのPackagesフォルダにアセンブリが配置されていましたが、CTP3では、プロジェクト配下のPackagesフォルダが無くなり、%HOMEPATH%.KPM に集約されてすっきりしてました。
以下は気になったことの自分メモです
- project.jsonを編集して、たとえば、dependenciesに「"EntityFramework.InMemory": "7.0.0-alpha2-10018"」と書いたら、jsonファイル保存時にVSが依存性解決の確認を行う(KPMを動かす)
- 「"C:\Users\aoki\.kpm\packages\EntityFramework.InMemory\7.0.0-alpha3\lib\net45<K10とportable-net451+win81も>\EntityFramework.InMemory.dll"」がダウンロードされる。
- 7.0.0-alpha2-10018がダウンロードされるかと思ったら、7.0.0-alpha3だったので、少し想定とは違う..
- DLLのダウンロード前には、以下のリクエストを投げている。
- http://www.myget.org/F/aspnetrelease/api/v2/Packages()?$select=Version&$filter=(Id%20eq%20%27EntityFramework.InMemory%27)&$format=json
- MyGetで、該当ファイルを見つけられるので、
- http://www.myget.org/F/aspnetrelease/api/v2/package/EntityFramework.InMemory/7.0.0-alpha3-1049
- 等(取得できるURLのどれか)にアクセスして、「EntityFramework.InMemory.7.0.0-alpha4-10486.nupkg(実態はDLLが入ったZIP)」をダウンロード。
- http://www.nuget.org/api/v2/FindPackagesById%28%29?Id=%27EntityFramework.InMemory%27
- NuGetにもパッケージの確認をしているが、該当ファイルはなし
- http://www.myget.org/F/aspnetrelease/api/v2/Packages()?$select=Version&$filter=(Id%20eq%20%27EntityFramework.InMemory%27)&$format=json
- ちなみに、対象とするフレームワークの設定で、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
- ただ「https://github.com/aspnet/MusicStore/blob/dev/src/MusicStore/project.json」を見ると、aspnet50とaspnetcore50になっていた。cloud最適化されたaspnetのフレームワークという位置づけ? 少し気になる。
- プロジェクトファイルの代わりにproject.jsonに含めるコードを書けるようになった。
{ "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>
- MyGetのフィードを、Visual Studio OnlineのGITコードから生成できる
- http://www.visualstudio.com/en-us/myget-and-vso-vs.aspx
- GitHubからデプロイもできるので、ビルドはMyGet側と思われます
- ソリューションフォルダと同じところに置く、Global.jsonは、 ソースやKPMのパッケージの場所を指定可能
- CTP3で、project.jsonを編集しようとしたら、DLLのインテリセンスのために、以下のようなリクエストを投げているよう(40件ずつとるので、3回)
- http://www.myget.org/F/aspnetrelease/api/v2/Packages%28%29?$orderby=DownloadCount%20desc&$select=Id&$skip=0&$top=40&$filter=%28Id%20ne%20null%29%20and%20IsAbsoluteLatestVersion&includePrerelease=true&$format=json
- http://www.myget.org//F/aspnetrelease/api/v2/Packages%28%29?$orderby=DownloadCount%20desc&$select=Id&$skip=40&$top=40&$filter=%28Id%20ne%20null%29%20and%20IsAbsoluteLatestVersion&includePrerelease=true&$format=json
- http://www.myget.org/F/aspnetrelease/api/v2/Packages%28%29?$orderby=DownloadCount%20desc&$select=Id&$skip=80&$top=20&$filter=%28Id%20ne%20null%29%20and%20IsAbsoluteLatestVersion&includePrerelease=true&$format=json
参考資料
- .NET vNextの資料が参考になります
- ASP.NET vNextの本家ブログは、InfoQのこの記事からたどって読むとよさそう。
Windowsのタッチパッドで「2本指タップから右クリック」する設定(WindowsでMac風操作)
NEC LaVie Gのタッチパッド(NX Pad / Synaptics ClickPad)を使っています。
「WindowsのタッチパッドをMacBookに近づける」にあるようにMacのトラックパッドに近い設定は大体できます。
ただし「2本指タップで右クリックメニュー」を出す設定は、いい感じにできません。
そこで、こちらのページで紹介されているようにレジストリをいじることで、指2本でトラックパッドをタップすることでコンテキストメニューを出せるようになります。
手順は以下の通り(レジストリをいじるので、自己責任でお願いします)
- WindowsキーとRキーを押す
- RegEditと入力
- HKEY_CURRENT_USER\Software\Synaptics\SynTP\TouchPadPS2を開く
- MultiFingerTapFlagsの値を3に
- 2FingerTapActionの値を2に
- ログオフ&ログイン
以上で、タッチパッドを2本指で触ることで、右クリックメニューが出せて、快適になります。
ちなみにWindowsPCをMacOS風に近づけたい場合、Dexpot(仮想デスクトップ)、VistaSwitcher(タスク切り替え)、Launchy(Spotlight検索)、AutoHotkey例1 AutoHotKey例2(キーボードリマップやBetterTouchTool的)とか、ConEmu(マルチタブターミナル)とか使うと多少近づけることができます。ただWindows標準で使っていれば、それはそれで慣れるような気もします。