kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

Visual Studio 2017でMStestが実行できない場合の対処(System.Runtime, Version=4.1.1.0または依存関係の1つが読み込めないエラー)

二日ほどドはまりしました。Visual Studio 2017(15.7.1)でフル .NETでプログラムを作っていたのですが、ある日からMSTestを使ったUnit testの実行時こんなエラーが出るようになりました。

実行プログラム 'executor://mstestadapter/v2' の呼び出し中に例外が発生しました: 
ファイルまたはアセンブリ 'System.Runtime, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'、
またはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりません。

ターゲットフレームワークを 4.5から4.7.2までいろいろ変えても駄目。どうもNuGetからライブラリーを追加してからのようで、プロジェクトテンプレートから作ったような足し算するような素のプロジェクトでは起きません。

csprojの 方法: 自動バインディング リダイレクトを有効/無効にする | Microsoft Docsを無効にするという方法も駄目。探しまくったら対処方法がありました。

github.com

  • MSTestのプロジェクトテンプレートに追加されているMicrosoft.VisualStudio.TestPlatform.TestFrameworkと同Extensionsを削除する
  • 代わりに参照からC:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\ReferenceAssemblies\v2.0\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll" を追加する

「単体テストを作る」から作ったMSTestの参照状態。

f:id:kkamegawa:20180516142712p:plain

この状態だと実行できないですが、Microsoft.VisualStudio.TestPlatform.TestFrameworkで始まるアセンブリを二つ消して、前述のC:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\ReferenceAssemblies\v2.0\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dllを追加します。

こんな感じになっていれば実行できるはずです。少なくとも私は大丈夫でした。

f:id:kkamegawa:20180516142521p:plain

デバッグに便利な拡張機能RevDeBug

はじめに

RevDebugという会社から「RevDebugってツールあるんだけど」と案内が来たので、試しに使ってみました。ProfilingTime Machineデバッグ情報の共有とかはチーム開発するときに便利そうです。

.NET Core 2.0以降や.NET Framework 4.5以降のサポートだそうです。既知の問題もちょっとあるのでこれに該当する人は少し待ちましょう。

Requirements for RevDeBug

  • いくつかのC# / VB.NET 15.0構文をサポートしていない
  • ASP.NET Core/ASP.NET MVCのUnhandled exceptionsが記録されない
  • ASP.NET Coreのhttpリクエストが記録されない
  • References with aliases other than global are not supported.
  • アンチウィルスのAvastを使っている場合、デバッグが記録されないので、ホワイトリストに入れて

Value Prompts

Value Prompts

これは無償版でも使える機能ですね。いちいちローカルやウォッチウィンドウを開かなくても変数の上に現在の値を表示してくれます。OzCodeにも同じような機能があります。

Monitoring

Monitoring

すべての例外を一か所のウィンドウで確認する機能ですね。メニューのReDebugからExceptions/Searchを表示します。

Profiling

Profiling

  • 実行範囲の上位10メソッドを円グラフで表示
  • もっとも呼び出されている上位5メソッドを棒グラフで表示
  • エディタの行番号の隣に処理時間に応じて色付けされる
  • RevDeBugメニューのPerformanceをクリックすると、呼び出し回数、処理時間をまとめて表示するウィンドウが表示

結構便利そうですね。

Time Machine

Time Machine

IntelliTraceをもっと便利にしたTime Machineといえばいいんでしょうか。矢印記号をクリックすれば前後のステップに移動できます。State Dataを使って、現在ステップの状態も取れます。マルチスレッドなどでは便利そうです。

Call StackScope Stackでは任意の呼び出し元に移動できます。Scope StackはVisual Studioにない機能のはずなので、(やめたほうがいいけど)多段呼び出しになっているような場合はうれしいですね。

Session Recording

Session Recording

以前やったデバッグ、あれどうだったっけ?と思うことはないでしょうか?Session Recordingを使えば、デバッグの記録ができます。IntelliTraceでも同じような感じですね。まだ深く使ってないので、どちらが、とはいえないですが、これもやはり高速なディスク上に保存するといいと思います。これは単独で使うものではなく、どちらかといえば、次の共有機能とセットでしょう。

記録ファイルは%userprofile%の下、具体的には以下の場所に入っています。

%userprofile%\documents\RevDeBug\SolutionName\Recordings

Share your recordings and save them for later use by others

Share your recordings and save them for later use by others

最近Visual Studio Codeでは複数の端末間で同じコードのデバッグができるようになりましたが、時差があるような場所にいる人にデバッグを頼むとか、オフラインの場所ではそれも難しいですね。そんなとき、このSession Recordingで記録した情報を送れば環境によらず同じデバッグができます。特にマルチスレッド関係のデバッグは端末によっておきたり起きなかったりが発生するため、大変有用だと思います。

リモート環境でのデバッグ情報も保存して共有できるので、特にクラウド環境とかのデバッグ情報を共有するのは便利そうです。

そのほか

Kubernetisのコンテナーデバッグ、AzureやAWSでの.NET Coreアプリデバッグ、AWS Lambdaのデバッグなどもサポートしているようです。Lambdaで.NET Core使っている人はどうでしょう?

チュートリアル用のプロジェクトも公開されています。

Visual Studio 2017オフラインイメージから古いコンポーネントを削除するツールを公開しました

Visual Studio 2017はオフラインインストール用のイメージ作成ができます。

docs.microsoft.com

Visual Studio 2017もラピッドリリースになったようで、従来のService Packレベルの更新が数か月に一度程度公開されます。この辺は.NET Coreや昨今の流れのはやいオープンソース系のツールについていくには仕方のないことですね。

docs.microsoft.com

ところが困った点として、同じフォルダでオフラインイメージを構築していくと、古いバージョンのコンポーネントもたまっていきます。私の場合は最新版だけあればいいので、こんなツールを作ってみました。

github.com

Visual Studio 2017のオフラインイメージをダウンロードしたフォルダを指定して実行すると、最新のコンポーネントのフォルダを除いて削除します。

.NET Coreの練習用に作ってみました。Releaseは作っていないのですが、Visual Studio用のツールなので、Visual Studioは持っている(もしくは.NET Core SDKだけでビルドできる)ので、まぁいいでしょう。

誰得ツールですが、よかったら使ってみてください。

(追記) --cleanオプションでできたのか…前なかった気がするんだけどなぁ…と思ったら、15.3のインストーラーで追加されたのか。

dotnetConf関西2017を開催しました

connpass.com Photo by No.1

f:id:kkamegawa:20171015172950j:plain

あいにくの天候でしたが、参加してくださった方、スピーカーを引き受けてくれた方、スタッフの皆さん、会場を提供していただいた日本マイクロソフト様、ありがとうございました。今回は早々に参加者が定員上限に達して、あまり宣伝しなくてもいいかなという感じでほんと助かりました。

あいにく、ご都合が悪く、参加できなかった方もちゃんとキャンセル処理していただけたのも助かります。

前回よりも早々に枠が埋まったので、.NET(Core)をもう一度評価してみようとか、最近英語情報ばかりで日本語情報が必要なのか、その辺りはわかりませんが、アンケート結果によってはGlobal Azure Bootcampの前に1-2回程度何かやるかもしれません。

スピーカー陣のスライドやネタとなったツィートを #dotnetconf ハッシュタグから拾ってきました。漏れていたらすいません。

今後もイベント開催するときはよろしくお願いします。