アーカイブ

Archive for the ‘プログラミング’ Category

ASP.NET Coreでマイグレーションファイルをマイグレーション専用プロジェクトに配置する。

CodeFirstでプログラムを作っている場合、dotnet コマンドの migrations サブコマンドでマイグレーションスクリプトをプロジェクトに追加しますが、マイグレーションプロジェクトを別のプロジェクトで管理したい場合の方法
https://github.com/bricelam/Sample-SplitMigrations

広告
カテゴリー:ASP.NET, DB, 未分類

Riderでマルチスタートアップ

Visual Studioで複数プロジェクトをいっぺんに実行したりデバックしたりする場合、ソリューションのスタートアッププロジェクト設定でマルチスタートアップから実行するプロジェクトを選択します。

Riderでは複合実行という設定で同じように複数プロジェクトを実行することができます。
マニュアルでは、複合ってなっているんだけれど、IDEではCompoundって名前ですね。
https://pleiades.io/help/rider/Creating_Compound_Run_Debug_Configuration.html

カテゴリー:ASP.NET, Visual Basic

MacでDockerサポートな.net coreをデバックする場合は、/usr/local/share/dotnet/sdk/NuGetFallbackFolderをFileShareに設定する。

Visual Studio 2017で作った、DockerサポートありのASP.NET Coreプロジェクトを、Visual Studio for Macででバックしようとしたら、こんなエラーで怒られた。

/Applications/Visual Studio.app/Contents/Resources/lib/monodevelop/AddIns/docker/MonoDevelop.Docker/MSbuild/Sdks/Microsoft.Docker.Sdk/build/Microsoft.VisualStudio.Docker.Compose.targets(363,5):
error :
ERROR: for dockercompose10154073938731495326_todo_1
Cannot start service todo: b’Mounts denied:
The path /usr/local/share/dotnet/sdk/NuGetFallbackFolder
is not shared from OS X and is not known to Docker.
You can configure shared paths from Docker ->
Preferences… ->
File Sharing.\r\nSee https://docs.docker.com/docker-for-mac/osxfs/#namespaces for more info.

言われた通り、Dockerの設定から、下記のフォルダーをFile Shareに追加したらうまく動いた

/usr/local/share/dotnet/sdk/NuGetFallbackFolder

Riderだとこんなエラーが出て実行できない。
これはWindowsでも同じだから、Rider側の対応が必要そう

Project ‘docker-compose’ load failed: The SDK ‘Microsoft.Docker.Sdk’ specified could not be found.

サポートを見ると現在作業中?

https://rider-support.jetbrains.com/hc/en-us/community/posts/115000634804-Visual-Studio-Tools-for-Docker-Support-needed

リンクにある通り、単にビルドするだけならRiderの拡張機能を使ったり自前でビルドすれば良いんだけれど、デバックまで考えるとVSMacと同等の機能があると嬉しい。

カテゴリー:ASP.NET, DB, Docker, 未分類

StackExchangeでクラスター構成のRedisにTransactionで値を登録する場合はHashTagを使う

こんなコードをクラスター化されたRedisに対して実行すると

こんな例外が発生します。

StackExchange.Redis.RedisCommandException: Multi-key operations must involve a single slot; keys can use ‘hash tags’ to help this, i.e. ‘{/users/12345}/account’ and ‘{/users/12345}/contacts’ will always be in the same slot
場所 StackExchange.Redis.ServerSelectionStrategy.Select(Message message)
場所 StackExchange.Redis.ConnectionMultiplexer.TryPushMessageToBridge[T](Message message, ResultProcessor`1 processor, ResultBox`1 resultBox, ServerEndPoint& server)
場所 StackExchange.Redis.ConnectionMultiplexer.ExecuteAsyncImpl[T](Message message, ResultProcessor`1 processor, Object state, ServerEndPoint server)
場所 StackExchange.Redis.RedisTransaction.ExecuteAsync(CommandFlags flags)
場所 WindowsFormsApplication2.Form1.d__1.MoveNext() 場所 c:\users\sugiyama\documents\visual studio 2015\Projects\WindowsFormsApplication2\WindowsFormsApplication2\Form1.cs:行 36

エラーメッセージにある通り、Multi-keyに対する更新は対象となるデータがすべて同じスロットにある必要があるので、ハッシュタグでくくりましょうねとの事。

ハッシュタグでくくるとなんで同一のスロットに保存されるかはこのドキュメントが詳しい
Premium Azure Redis Cache の Redis クラスタリングの構成方法
https://docs.microsoft.com/ja-jp/azure/redis-cache/cache-how-to-premium-clustering#how-are-keys-distributed-in-a-cluster

という事で、こんなキー構成にするか、トランザクションを諦めるしかないようです。

カテゴリー:ASP.NET タグ:

ReSharperのテストランナーを使うとファイルを見失う、、、

Visual Studioのテストランナーだとうまくいくのに、ReSharperのテストランナーを使うとうまくいかないケースが有った。

デバックでおっていってみると、相対パスにあるユニットテスト用の外部ツールを起動している部分で、ファイルを見失っている感じこんなコードがあるところで、

Process.Start(Path.Combine(Assembly.GetExecutingAssembly().Location, @”..\..\..\..\Hoge.exe”))

Visual StudioのテストランナーだとAssembly.GetExecutingAssembly().Locationには実行しているアセンブリのパスが入るんだけれど、ReSharperのテストランナーから実行するとこんなパスが入ってくる。「%LOCALAPPDATA%\Temp\0ywyjnls.q4g\dbsqoo3y.wab\HogeHoge.Test\assembly\dl3\8aa495c4\efd6deeb_4459d301\」

これは、ReShaperのテストランナーがユニットテスト前にDLLをシャドーコピーしてからテストを実施するためなので、Visual StudioのReSharperメニュー > Options > Tools > UnitTesting > Unit Test Runnerの Shadow-copy assemblies begin tested のチェックを外してあげれば Visual Studioのテストランナーと同じ挙動になる。
Reshaper-Shadow-Copy

カテゴリー:Visual Studio

Visual Studio 2017が起動しない場合、privateregistry.binを消してみよう

どうもVisual Studio 2017を起動してもなかなか立ち上がってこない。タスクマネージャーを見ていると、ほとんどCPUを使わない状態で停止し待っている感じがする。

Visual Studioをログ出力モードで起動したら、「AppId starting registry detouring」ってステップで動作が止まっているようなので、キーワードに入れて検索してみたら%LOCALAPPDATA%\Microsoft\VisualStudio\配下のprivateregistry.binを消したら解決したという情報があったので、とりあえずリネームしたら動いた。

VS2017 version 15.1 (26403.0) will only start as administrator.

privateregistory.binって何者?

まぁ、なんとなく名前から検討はつくんですが、Visual Studio インスタンスの検出および管理用のツールのVisual Studio インスタンスのレジストリの編集をみると、

Visual Studio 2017 ではレジストリ設定はプライベートな場所に保存されているため、同じバージョンの Visual Studio の複数のインスタンスを side-by-side で同じコンピューターで使用できます。

ってなっているので、レジストリ情報が何らかの原因で壊れていたのが原因なのかな。

カテゴリー:Visual Studio, 未分類 タグ:

メモ Microsoftによる.NETアーキテクチャの手引きに関する発表

Microsoftによる.NETアーキテクチャの手引きに関する発表

https://www.infoq.com/jp/news/2017/05/microsoft-architecture-guidance?utm_campaign=infoq_content&utm_source=infoq&utm_medium=feed&utm_term=global

4つのアプリケーションアーキテクチャに関する手引きのドラフトが、MicrosoftのDeveloper DivisionとVisual Studioの製品チームから入手可能になった。これらのドラフトは4つの領域を対象としている。マイクロサービスとDocker、ASP.NETによるWebアプリケーション、Azureのクラウド配置、そしてXamarinによるモバイルアプリケーションである。それぞれの手引きはそれぞれのトピックに沿った複数の文書から構成される。Microsoftはこれらのドラフト文書に対して一般のコミュニティからのフィードバックを求めている。

軽く見ようかと思ったら、全部が全部重くて挫折しました。。。