redwarrior’s diary

C#, ASP.NET, WEB, G*などの雑多な情報

.NET Framework

(小ネタ)Visual Studio Installer Projectsを使用し、アップデートに対応したインストーラーを作成する

Visual Studio Installer Projects拡張機能を使用すると、インストーラーを作成するためのプロジェクト(Setupプロジェクト)を作成できるようになる。 アプリケーションを更新するたびに、古いバージョンをアンインストールして、新しいバージョンをインス…

Dispatcher.InvokeとDispatcher.BeginInvoke、Dispatcher.InvokeAsyncの違い

WPFアプリケーションで、別スレッドから画面を更新したい場合は、DispatcherクラスのInvokeメソッドに、引数としてメソッドを渡して、UIスレッドで実行されるようにします。 ググってみると、DispatcherクラスにはInvokeメソッドの他に、BeginInvokeメソッド…

Prism のバージョンと Xaml.Behaviors.Wpf、System.Windows.Interactivity の対応状況を調査した

過去記事の Prismを使用したWPFアプリケーションのまとまったサンプルを作ってみた - redwarrior’s diary や、 WPFアプリのMainWindowの終了のキャンセルを、MVVMフレームワークを使用して実装する - redwarrior’s diary で使用している、prism:InvokeComman…

ProgressBarの表示をMVVMアーキテクチャで実装する

ProgressBarの表示って、非同期処理が入るので、意外と難しいですよね。 表示の仕方は、以下のサイトで分かりやすく説明されているのですが、素のWPFなのです。 anderson02.com どうせならば、MVVMアーキテクチャで実装したいなと思いやってみました。 まず…

Visual Studio 2019 で WCF Data Services のクライアントアプリケーションを開発する

過去の記事でサーバ側のアプリケーション(Web API)について書きましたが、クライアントアプリケーションを新しく作ることになりました。 redwarrior.hateblo.jp Visual Studio 2015で開発するならば、特に困らないのですが、Visual Studio 2019で開発した…

Visual Studioのファイルのプロパティのビルド アクションの「コンテンツ」と「なし」の違い

Visual Studioの ファイルのプロパティ のビルド アクションの値で「コンテンツ」と「なし」の違いを調べました。 Visual Studio上でファイルを選択して ファイルのプロパティ に表示される項目のうち、出力ディレクトリにコピー は、値を「常にコピーする」…

(小ネタ).NET CoreのWPFアプリケーションから、.NET Frameworkのコンソールアプリケーションを実行する方法

タイトルの内容をやりたい人はあまりいないと思いますが、必要になったので調べました。 以下が作業手順になります。 .NET CoreのWPFアプリケーション、.NET Frameworkのコンソールアプリケーションプロジェクトをソリューション内にそれぞれ作成します。 WP…

Prismを使用してサブウィンドウでRegionを使用した場合に発生したエラーと対処方法・その2

一つ前の記事で、サブウィンドウでもMainWindow(親ウィンドウ)と同一のRegionManagerを使用するように設定した。そうしたら、新たな問題が発生した。 サブウィンドウを閉じて、また開くとエラーが発生する サブウィンドウでもMainWindow(親ウィンドウ)と…

Prismを使用してサブウィンドウでRegionを使用した場合に発生したエラーと対処方法・その1

Prismを使用したWPFアプリケーションを開発していて、サブウィンドウでRegionを使用した場合に発生したエラーと対処方法 次の画面に遷移できない 現象 Regionを使用した画面遷移 ウィンドウのXAMLにRegionを設定し、コードビハインドで、IRegionManagerイン…

PasswordBoxのバリデーションをMVVMアーキテクチャで実装する

前提のはなし WPFでマスクのついたテキストボックスを作成するには、PasswordBoxというコントロールが用意されている。 PasswordBoxに入力した値は、string型のPasswordプロパティから取得できるが、セキュリティ上はSecureString型のSecurePasswordプロパテ…

TFS 2018 のビルドが NuGet restore タスクで失敗したので調査する

少し前にソースコードの修正や、ビルド定義の編集をしていないのに、TFSのビルドが失敗するようになっていたので調査しました。 エラーメッセージ MSBuild auto-detection: using msbuild version '16.5.0.12403' from 'C:\Program Files (x86)\Microsoft Vi…

ClickOnceで使用できたコード署名が、MSIXで使用できない理由を調査し、対応した

背景 この間、ClickOnceの発行をする時に、使用したコード署名証明書(コードサイニング証明書)をPCの証明書ストアにインストールしたので、 .NET Coreアプリケーションの配布形式であるMSIXでも試してみました。 MSIX形式で配布する方法を調べると、以下の…

Entity Framework で SQLite を使用する

NuGetでSystem.Data.SQLiteパッケージをインストールし、以下をApp.configに追加する。 <entityFramework> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> </provider></providers></entityframework>

TFS 2018 で ClickOnce の発行を行う

少し前に作成したWPFアプリケーションは、対象OSとしてWindows 8.1も含まれるため、フレームワークとして.NET Framework 4.5.1を使用しました。 Webアプリ(ASP.NET MVC)は、TFS上でビルド(XAMLではない)、リリースが出来るようにしたので(下記参照) redw…

WPFアプリのWindowの閉じる・開くを、MVVMフレームワークを使用して実装する

WPFアプリケーションで、自作のボタンを押して画面を閉じて、新しい画面を表示する処理をMVVMフレームワークを使用して実装する方法を調べました。 MVVMフレームワークは、Prismを使用します。 自作のボタンを押して画面を閉じる 自作のボタンを押して画面を…

WPFアプリのMainWindowの終了のキャンセルを、MVVMフレームワークを使用して実装する

WPFアプリケーションで、×ボタンを押してメイン画面を閉じるときに、ある条件を満たす場合は閉じないようにしたい場合があります。言い換えると、終了のキャンセルをしたい場合があります。 コードビハインドを使えば、簡単に実装する事が出来ますが(参考: …

2重起動防止処理を組み込んだWPFアプリでClickOnceの更新と再起動を行う

タイトルでやりたい事を伝えきったので、やり方を説明します。 ClickOnceの更新方法は、探せば見つかると思いますので割愛します。 参考:ClickOnce に関するまとめ - Qiita ClickOnceによる更新は、アプリケーションを再起動しないと行われません。 なので…

エラーメッセージがViewを切り替えると消える事への対処方法

課題 バリエーションエラー 一つ前の記事で、第5回のエラー処理のサンプルを作成した時に、バリエーションによるエラーメッセージを表示した状態で、一覧から別の項目を選択すると、Viewが切り替わり、右側に新しい画面が表示される。 その後、元の項目を表…

Prismを使用したWPFアプリケーションのまとまったサンプルを作ってみた

新しく作成するアプリケーションで、Windows Forms、WPFで開発するか悩んでいるチームがあったので、 説明用にWPFのサンプルを作成したが、お披露目する前にWindows Formsで開発する事に決まったようなので、勿体無いのでこちらで公開しようと思う。 サンプ…

(小ネタ)WindowsフォームのDataBindingに関するリンク集

Windowsフォームでデータバインディングを行う場合に、BindingSource、IDataErrorInfo、ErrorProvider、null値の制御についての有用なリンク集。 サイト WindowsFormsでの単項データバインドまわり | tocsworld IDataErrorInfo Interface (System.ComponentM…

BindingSourceを使用したTextBoxのデータ入力時におけるメリット

以前にWindowsフォームで作成したアプリケーションを修正する機会があり、BindingSourceについて理解が深まったので、記録を残しておく。 「TextBoxに入力した値をバリデーションして、正しい値ならば紐づいたDBのレコードを更新する」というよくある処理を…

NPOIでExcelのセルの値を取得する(関数も対応)

NPOIを使用してExcelを読み込む処理を作成したので、後から見返せるように気づいたことをメモしておく。 確認したバージョン:.NET Framework 4.6、NPOI 2.3.0 Excelのセルの値を取得する場合は、以下のようにまずICellインスタンスを取得する。 //sheetは、…

Excel読込でNPOIをEPPlusのように使うため拡張メソッドを作成した

なぜEPPlusを直接使わないかは、過去の記事を参照。 redwarrior.hateblo.jp NPOIを直接使うと、同じようなコーディングを繰り返し行う事が結構あったので、拡張メソッドを作成しました。 EPPlusを参考にしたメソッドや、あると便利そうなメソッドを作りまし…

(小ネタ)拡張メソッドを使用する場合も、Nullチェックは必要です!

IEnumerableインターフェイスのAnyメソッドを使用した時に、変数の値がnullでエラーになった。Anyメソッドは拡張メソッドなので、変数がnullでエラーになるのはおかしいのでは?と思ったが、答えは意外なところに。

(小ネタ)Chaining AssertionのParameterized TestでどのTest Caseで失敗したかを記録する

Chaining Assertionでは、Parameterized Testがサポートされているが、テストが失敗した時のメッセージにはどのケースで失敗したかの情報は含まれていないため、多くのテストケースを試す場合は以下のように工夫すると良い感じです。 //公式サンプルコードを…

C#でExcelファイルを扱うライブラリごとのファイルクローズ方法(EPPlus、NPOI)

C#(ASP.NET MVC)でExcelファイルを扱う方法を調べていて、EPPlusが良さそうだったので簡単なプログラムを作成して動作を確認した。しばらく経って実際に使用する時になって、ファイル形式が .xls であることが判明。 EPPlusでは .xls のファイルは読み込め…

TFS 2015のXAMLビルドでNuGetの復元を行わない設定をしたらビルドが超速く終わるようになった

メモ:TFS 2017は、NuGetサーバーをローカルで建てることが出来るらしいので、そちらを使った方がディスク容量の節約になると思いますし、そちらを使いましょう。 TFS 2015から新しいビルド方式が用意されて、TFS 2017もリリースされ、今後あまり使われなく…

IIS上で動くASP.NET (MVC)アプリケーションの権限について

ASP.NET MVC アプリケーションを別サーバーにデプロイして動作確認しようとしたが、DBやフォルダへのアクセス権限でエラーが発生しました。以前に設定したのが少し前で、やり方を忘れていたのと、IIS上でASP.NET MVC アプリケーションの権限について理解があ…

(小ネタ).NET Frameworkの本体と、targeting packは別物

タイトルからして、何当たり前のことを言っているんだ感が全開ですが、今後同じ間違いをしないように書いておきます。 開発環境とネットワークでつながっていない環境に、ASP.NET MVC 5 アプリケーションをデプロイする必要がありました。 デプロイの「発行…

AutoMapper は使わない!

ASP.NET MVC で開発をしている時に気になってくるのが、Entity Framework で作成したエンティティと画面で使用するモデル(ViewModel)の詰め替えをどうするかということ。 少しググってみると、AutoMapper を使用すると良いと出てくる。プロパティを一つず…