c#

ASP.NET Core アプリケーションを Docker で動かす

yo aspnet で作成したプロジェクトには Dockerfile が含まれているので、 ASP.NET Core アプリケーションを Docker で動かすこともできる。 ただ、2016/07/25 時点では Dockerfile に手直しが必要。 そのままだと docker build でコケる。 といっても apt-ge…

OpenCover を使ってコードカバレッジを計測したメモ

c#

アプリのコードがだいぶ増えてきて、それに伴いテストコードも増えてきた。 いい加減そろそろテストを書いていないメソッドの把握が難しくなってきたところだ。 コードカバレッジを計測する頃合かもしれない。 プライベートプロジェクトなので、開発は Visua…

Entity Framework でエンティティを削除したら取得済みエンティティの外部キーが null になっていてハマッた

c#

Id の型に int ではなく string を使った public class Item { public string Id { get; set; } public string ProjectId { get; set; } public string Title { get; set; } public string Content { get; set; } } のようなエンティティで public class Ite…

Swagger definition からクライアントとサーバーのソースコードを生成してみた

c#

前回は簡単な Web API の Swagger definition を書いただけで終わってしまったけど、 ここからが本題。 やりたいのは、Swagger definition からクライアントとサーバーのソースコード生成すること。 そのためのツールとして swagger-codegen が提供されてい…

Selenium を使った画面テストでテスト対象の ASP.NET MVC アプリを自動起動する

c#

ASP.NET MVC で開発しているアプリの画面テストを、Selenium を使って書き始めた。 tnakamura.hatenablog.com テストを実行するときは、先に ASP.NET MVC アプリを Visual Studio から実行しないといけない。 毎回これやるの面倒なんで、IIS Express を使っ…

ASP.NET MVC アプリの画面テストで Selenium を試してみた

c#

Selenium 実践入門を読んで Selenium 熱に火がついたので、 ASP.NET MVC で実装しているアプリの画面テストを Selenium 使って書くことにした。 もちろん C# で。 画面テスト専用のテストプロジェクトを作成し、 Selenium を使うためのパッケージをインスト…

ASP.NET Identity でユーザーを作成するときは必ず UserManager を使うこと

c#

マイグレーションで Seed データを投入するとき、 ユーザーを作成するところで UserManager を使わずに、 IdentityDbContext を使って直接データベースに保存してしまっていた。 そのせいで、ログインするときに ClaimsIdentityFactory が内部でクレームを作…

C# でも匿名型でインタフェースを実装できたらいいのにとたまに思う

c#

たとえば public interface IDomainEventHandler { bool CanHandle(IDomainEvent e); void Handle(IDomainEvent e); } というインタフェースがあるとき EventBus.Register(new IDomainEventHandler { public bool CanHandle(IDomainEvent e) { return e is P…

Entity Framework でオブジェクトが変更監視中かどうか調べる方法メモ

c#

DbSet<TEntity>.Local プロパティを調べればわかった。 public class Customer { // Entity Framework 用コンストラクタ protected Customer() { } public Customer(string name) { Name = name; } public int Id { get; private set; } public string Name { get; pr</tentity>…

ASP.NET Identity でカスタムクレームを使う

c#

マルチテナントな Web サービスを作っていて、 どのテナントかの判断を現在ログインしているユーザーが持っているテナント ID で判断している。 そのため、HttpContext.User.Identity.GetUserId() で取得したユーザー ID を使って、 データベースからユーザ…

Heroku で最小の ASP.NET 5 アプリを動かす

Heroku が .NET サポートを予定しているのか知らないけど、 Github には heroku/dotnet-buildpack という ASP.NET 5 用のビルドパックがある。 github.com これを使えば ASP.NET 5 アプリを Heroku で動かせると思いきや、 Mac OSX で作成したプロジェクトを…

C# で Phantom Type もどき

c#

Phantom Type (幽霊型)っていうのを知った。 インスタンスの状態をメンバフィールドではなく型パラメータで持つことで、 状態チェックをコンパイル時に行えるテクニック。 なにそれ凄い。 型パラメータに指定するだけで、 インスタンス化したりメソッド呼ん…

ASP.NET MVC で Excel ファイルを出力

c#

Open XML SDK を使えば C# で Excel ファイル (.xlsx) を出力できた。 tnakamura.hatenablog.com 先日のサンプルではファイルに出力したけど、 SpreadsheetDocument はストリームへの出力にも対応している。 今度は Excel ファイルをダウンロードできる ASP.…

Open XML SDK を使って Excel ファイルを出力

c#

C# で Excel ファイルを出力する場合、.xls ファイルだと Microsoft.Office.Interop を使う ExcelCreator を購入して使う という選択肢があった。 Microsoft.Office.Interop は Excel のインストールが必要だし、 ExcelCreator は有料だしと、 趣味のアプリ…

最小の ASP.NET 5 アプリを Docker で動かす

はじめに yo のジェネレーターを使って ASP.NET 5 プロジェクトを作成したら、 次のような Dockerfile も含まれていた。 FROM microsoft/aspnet:1.0.0-beta7 COPY project.json /app/ WORKDIR /app RUN ["dnu", "restore"] COPY . /app EXPOSE 5000 ENTRYPOI…

Mac OS X に ASP.NET 5 開発環境を構築

はじめに そろそろ自宅の MacBook Pro にも ASP.NET 5 の開発環境を作るとしよう。 .NET Version Manager (DNVM) をインストール Homebrew を使ってインストールする。 brew tap aspnet/dnx brew update brew install dnvm Zsh の設定に追加して、dnvm コマ…

ViewBag vs ViewModel

c#

ASP.NET MVC 5 プロジェクトを新規作成したら、HomeController が ViewBag を使ってビューにデータを渡している。 一方、『Entity Framework を使用した、ビューがある MVC5 コントローラー』を追加すると、 Entity Framework を使って取得したデータを View…

『C#エンジニア養成読本』読んだ

Sansan の記事が読みたくて購入。 Git でバージョン管理 カスタマイズした Git Flow で開発を進める NUnit で自動テスト Jenkins + MSBuild で CI Pivotal Tracker でイシュー管理 Slack でコミュニケーション という感じの内容で、 スタートアップでよく見…

WSDL から XML Web サービスのソースコードを生成

c#

WSDL から XML Web サービスを生成する機能を Visual Studio で探したけど、 見つけられなかったのでコード書いてみた。 System.Web.Services.Description 名前空間にある ServiceDescription と ServiceDescriptionImporter、 あと CodeDom を使って生成で…

『C# 実践開発手法』読んだ

本書が主張する『アダプティブコード』とは、 コードを大幅に変更することなく、新しい要求やシナリオに対処する適応力のあるコード。 そのアダプティブコードを実現するためのキーがインターフェイス。 インターフェイスのみに依存することで、実装の変更に…

LINQ で左外部結合

c#

いつも忘れて、その度ネットで調べているので、ブログにメモしておく。 DefaultIfEmpty を使うのがポイント。 using System; using System.Linq; namespace LinqLeftOuterJoinSample { public class Sector { public int Id { get; set; } public string Nam…

『.NET のエンタープライズアプリケーションアーキテクチャ第2版』読んだ

本書の内容は、.NET に限らず Java や他の言語でも適用できそうだ。 ただ、内容を理解するにはドメイン駆動開発や GoF のデザインパターン、 Martin Fowler のエンタープライズアプリケーションアーキテクチャパターン等の知識が必要。 ドメイン駆動開発はま…

ASP.NET MVC で二重サブミットを防止したい

c#

フォームなんかでボタンをうっかりダブルクリックしちゃって二重に投稿されてしまうのを防ぎたい。 クリックしたらボタンを無効にできればなお良し。 単純に JavaScript でボタンクリックされたら無効にするイベントハンドラ書けばいいと思ってたら、クライ…

Visual Studio 2015 の ASP.NET 5 プロジェクトを Windows7 でビルドするには PowerShell 3.0 以上が必要だった

c#

Visual Studio 2015 で ASP.NET 5 プロジェクトをビルドしようとしたら DNX SDK バージョン 'dnx-clr-win-x86.1.0.0-beta5' のインストールに失敗しました。 ソリューションでは、このセッション用に DNX SDK バージョン 'dnx-clr-win-x86-1.0.0-beta5' を使…

Rails の flash みたいに ASP.NET MVC の TempData を使ってみた

c#

Rails の flash と同じことが ASP.NET MVC でもやりたくて、 ミドルウェア自作するしかないかなぁって思っていたんだけど、 TempData で同じことができそうだった。 ただ、TempData を素で使うとキーを typo しそうなので、次のように拡張メソッド使っている…

ASP.NET MVC で WebForms の Chart を使って作成したチャートを PDF に埋め込む

c#

ASP.NET MVC で System.Web.UI.DataVisualization.Charting.Chart を使って、 レーダーチャートをカスタマイズできるところまでは確認できた。 ASP.NET MVC で WebForms の Chart をカスタマイズする - presenttnakamura.hatenablog.com 今度は iTextSharp …

ASP.NET MVC で WebForms の Chart をカスタマイズする

c#

System.Web.UI.DataVisualization.Charting.Chart を使って ASP.NET MVC で レーダーチャートを表示できた。 ASP.NET MVC で WebForms の Chart を使う - presenttnakamura.hatenablog.com 今度はレーダーチャートをカスタマイズしてみる。 カスタマイズ内容…

ASP.NET MVC で WebForms の Chart を使う

c#

System.Web.Helpers.Chart クラスを使うと、 ASP.NET MVC で手っ取り早くチャートを作成できた。 ASP.NET MVC でチャートを表示 - presenttnakamura.hatenablog.com System.Web.Helpers.Chart はなかなか高機能だけど、 カスタマイズしづらい。 XML 形式の文…

LINQ でランキングを作成

c#

LINQ でランキングを作成するサンプルを書いてみた。 using System; using System.Linq; namespace LinqRankingSample { class Student { public string Name { get; set; } public int Score { get; set; } } class Program { static void Main(string[] ar…

Microsoft Azure の Cloud Services のデプロイで嵌った

c#

嵌ったのでメモ。 WCF Service WebRole を含む Cloud Service を、Visual Studio 2013 Update 4 で Microsoft Azure にデプロイしたら、 パッケージを作るところでエラー発生。 Could not load file or assembly ‘Microsoft.WindowsAzure.Packaging, Version…