kkamegawa's weblog

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

GitHub Codespaces for Visual Studioを試す

visualstudio.microsoft.com

GitHub Codespaces for Visual Studio Codeは多く使われていると思いますが、Visual Studio版もEarly Accessが開始されています。申し込んでいたのですが、ようやく順番が回ってきたので、試してみました。Visual Studo Code版はブラウザーだけで使えることが売りですが、Visual Studio版はローカルにVisual Studioのインストールが必須です。

  • Visual Studio 2019 16.8 Previewが必要
  • Visual Studioのプレビュー機能からCodespacesの有効化が必要

f:id:kkamegawa:20201016130151p:plain

VS2019 Preview(16.8 Preview)を起動するときにコードスペースに接続という項目があります。これを使うのは、環境プレビュー機能GitHub Codespacesに接続するをチェックしておきます。

f:id:kkamegawa:20201016130156p:plain

Codespaces以外にも多くのプレビューがあるので、チェックするといいでしょう。

f:id:kkamegawa:20201016130159p:plain

コードスペースに接続をクリックすると、このような画面になります。GitHubにサインインをクリックすると、認証画面が表示されます。

f:id:kkamegawa:20201016130203p:plain

これだけの権限を使いますという表示が出ます。Authorize GitHubをクリックして承認します。このときパスワードは聞かれますが、多要素認証していてもコード入れさせられないんですね。

f:id:kkamegawa:20201016130208p:plain

認可完了後、接続するレポジトリー、インスタンスの種類、アイドルタイムアウト(最大2時間)の設定ができます。

f:id:kkamegawa:20201016130213p:plain

インスタンスタイプは4core/8GB RAM, 8core/16GB RAMのどちらかのようです。これ多分Windowsコンテナーなんでしょうかね。サーバーでのフォルダーはc:\workspaces\配下に該当のレポジトリー名を新規フォルダーで作っているようです。

f:id:kkamegawa:20201016130216p:plain

リモートなので、最初にgitのメールアドレスと名前を登録します。多分ずっと保持されるとは思います…多分(まだ再起動してない)。

f:id:kkamegawa:20201016130220p:plain

作ったとき思ったのですが、VS code版に比べて最初に作るのがだいぶ早いような?接続されると、タイトルバーのところでリモートであることがわかります。

f:id:kkamegawa:20201016130224p:plain

それ以外は全く変わらないようで、ぱっと見わからないですね。

f:id:kkamegawa:20201016130229p:plain

デバッグ実行もできます。通信しているというようなストレスもあまり感じないですね。LiveShare的な通信しているのでしょうか。ローカルとあまり変わらないです。

f:id:kkamegawa:20201016130232p:plain

右クリックメニューに関してはだいぶ違いますね。すっかり簡素ですし、拡張機能の類は使えないようです。

f:id:kkamegawa:20201016130237p:plain

リモートで動いているので、デバッグのプロセスIDはローカルに存在していません。デバッグコンソールもローカルに出ていないので、GUIアプリのデバッグや特権が必要なアプリの開発はちょっと厳しいですね。

中がどうなっているか(多分コンテナーなのでしょうけど)わからないですが、今後としては、せめてリモートデスクトップでデバッグ中のGUIをクライアントに飛ばすってのは欲しいところですね。

ぱっと見、Codespacesが実行されているサーバーのコンソールにアクセスする方法やWinodwsフォルダーをみる方法は見つからなかったけど、何か見つけたら報告してみたい。

実行するサーバーが4core/8GB RAM, 8core/16GB RAMとなかなかリッチ(Aインスタンスかな?)なので、正式版になった後の料金が気になるところです。セルフホスト版もあるといいなぁ。

Visual Studioでのビルド時にCOMコンポーネントでエラーが出る場合の対処

Visual Studio 2017(15.9.13)で発生しています。ある程度大いC++プロジェクトをビルドすると、突然こんなエラーが出るようになりました。

1>------ ビルド開始: プロジェクト: , 構成: Debug Win32 ------
1>エラー HRESULT E_FAIL が COM コンポーネントの呼び出しから返されました。
1>エラー:エラー HRESULT E_FAIL が COM コンポーネントの呼び出しから返されました。

一度このエラーが出ると、OS再起動、ソリューションクリーンアップとフルビルドしてもダメでした。Developer Communityにも報告されているので、そこそこ頻繁に出るようです。

developercommunity.visualstudio.com

Visual Studio 2019で同じソリューション開いても(toolsetやSDKはVS2017のままアップグレードしない)ビルドはできます。

最初についていた回避方法はこんなものでした。

  1. Developer Command Prompt for VS2017を管理者として実行する。
  2. "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\PublicAssemblies"に移動する
  3. gacutil -i Microsoft.VisualStudio.Shell.Interop.11.0.dll と実行する

自分の場合、上記の方法では直らなくて困っていたんですが、先日あらたな回避方法が追加されて、これで直りました。

  1. ソリューションファイルのあるフォルダーにある.vsフォルダー(隠しフォルダーです)を削除
  2. bin/objフォルダーを削除

やっぱりVSが変な挙動する場合、.vsフォルダーを削除するというのが鉄板の回避方法のようです。拡張機能なら拡張機能のキャッシュフォルダーを削除する。

Azure DevOpsでのCIとファイルエンコーディング

Azure Pipelinesでビルドすると、こんなエラーが出てしまいました。

f:id:kkamegawa:20181120063311p:plain

ローカルのVisual Studioでは問題なくビルドできます。このエラーはここで出ています。

testStep.Step = new string[] {"ブラウザ起動", "ログイン", "About表示", "終了" };

原因は「表」の字ですね。「表」には\と同じコードである0x5cを含んでいるので、エンコーディングエラーが発生しています。昔からCコンパイラとか使っている人にはおなじみです。

何故ローカルで出なくて、Azure Pipelinesで起きるかといえば、PipelinesのMicrosoft Hosted Agentは英語版OSで動いているため、Visual Studio 2017の標準エンコーディングであるSHIFT-JISのファイルが解釈できないからです。ローカルでは日本語OSなので、SHIFT-JISで問題がないと。

回避するにはソースファイルをUTF-8で保存しましょう。ファイル保存時にやってもいいですが、こういう拡張機能を使うと楽です。

marketplace.visualstudio.com

ロケールに依存するようなテストも発生します。こちらは逆で、USロケールに依存するようなテストがローカルの日本語OSではFailになるということが起きえます。今は見てないですが、昔のCoreFXのUnit Testにもそういうところがありました。

Azure Pipelinesに限らないと思いますが、ベースのOSでこういうところに引っかかることがあるので、気を付けてください。

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