アーカイブ

Archive for the ‘ASP.NET’ 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 タグ:

メモ 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はこれらのドラフト文書に対して一般のコミュニティからのフィードバックを求めている。

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

ASP.NET WebAPIをVB.NETで利用する場合に、ヘルプページのコメントを利用する。

ASP.NETではVB.NETの積極的なサポートがなくなりつつ有るこの頃ですが、うちのちかくではVB.NETの要望が収まらず、VB.NET+WebAPIでアプリを作っています。

この頃のVisual StudioのWebAPIプロジェクトでは、APIのヘルプページを自動的に作成する機能が提供されていますが標準のままだと、ドキュメンテーションコメントを書いてもDescriptionに反映してくれません。

検索すると、Areas/App_Start/HelpPageConfigの下記コメントを外せという指示とともにWebプロジェクトのビルド設定で、ドキュメンテーションコメントを吐き出す場所を設定しろという記事が目につきます。

Public Sub Register(config As HttpConfiguration)
    '' Uncomment the following to use the documentation from XML documentation file.
    'config.SetDocumentationProvider(New XmlDocumentationProvider(HttpContext.Current.Server.MapPath("~/App_Data/XmlDocument.xml")))

 

C#のWebプロジェクトのビルドプロパティー

image

VB.NETのWebプロジェクトのコンパイルプロパティー

image

ところがVB.NETのASP.NETプロジェクトではこの項目がありません。ただ、VB.NETのプロジェクトファイルにもProject/PropertyGroup/DocumentationFile要素はあるのでこいつにパスを指定すれば大丈夫だろ。と思ったのですが、、、出てくれません。無視されるようです。。。

ただ、まぁ指定のフォルダーにドキュメンテーションコメントがコピーされればいいので、ビルド後イベントを使ってあげましょう。

image

copy "$(ProjectDir)bin\$(TargetName).xml" "$(ProjectDir)App_Data\"

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

OraOps12.dllが見つからないと思ったら、MSVCR100.dllがなかった

Oracleに接続するWebサーバーを改めて構築しているわけですが、Oracleクライアントを入れるのもめんどくさい。ただ、これまでのしがらみがあってマネージドドライバーが使えないため、インスタントクライアントを利用することにしました。

いざデプロイしたサイトを実行すると、OraOps12.dllがないエラーでしばらくはまったのでメモ。

ODACをダウンロード

現在の最新版をOTNからダウンロード(現在は12.1.0.2.1)して、C:\install\odacあたりに解凍します。

http://www.oracle.com/us/products/tools/index-090165.html

インスタントクライアントのセットアップ

解凍したODACのフォルダーに移動して、allでinstant Clientをセットアップします。

cd C:\install\odac

install.bat all c:\oracle myorahome true

環境変数の設定

必要な環境変数を設定します。NLS_LANGは環境に合わせて。

  環境変数名 設定値 備考
1 PATH c:\oracle/bin;c:\oracle binを先にする?
2 NLS_LANG JAPANESE_JAPAN.JA16SJISTILDE 必要な場合

動作確認

Webアプリケーションをデプロイして動かしたらこうなった。

System.TypeInitializationException: ‘Oracle.DataAccess.Client.OracleConnection’ のタイプ初期化子が例外をスローしました。
—> System.DllNotFoundException: DLL ‘OraOps12.dll’ を読み込めません:指定されたモジュールが見つかりません。 (HRESULT からの例外:0x8007007E)
場所 Oracle.DataAccess.Client.OpsInit.CheckVersionCompatibility(String version)
場所 Oracle.DataAccess.Client.OracleInit.Initialize()
場所 Oracle.DataAccess.Client.OracleConnection..cctor()

— 内部例外スタック トレースの終わり —
場所 Oracle.DataAccess.Client.OracleConnection..ctor(String connectionString)
場所 LoginProcess.Load(String domain)
場所 Login.Page_Load(Object sender, EventArgs e)
場所 System.Web.UI.Control.LoadRecursive()
場所 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)()

調査中

しょうがないのでConsoleApplicationでDUAL表を検索するおなじみのサンプルを作る。ん?

image

コンピューターに MSVCR100.dll がないため、プログラムを開始できません。この問題を解決するには、プログラムを再インストールしてみてください。

Microsoft Visual C++ 2010 再頒布可能パッケージ (x64)のインストール

ダウンロードセンターからダウンロードしてインストールします。

http://www.microsoft.com/ja-jp/download/details.aspx?id=14632

 

無事動きました。

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