C# REPL とスクリプト
開発部の本橋です。
Visual Studio 2015 Update 1 より csi.exe
なるものが付いてくるようになりました。これは C# の REPL であり、スクリプトインタープリターのようです。ちょっと使ってみました。
REPL
スタートメニューより 開発者コマンドプロンプト for VS2015
を実行すると csi.exe
のあるフォルダにパスが通っています。私の環境では以下の場所にありました。
> where csi C:\Program Files (x86)\MSBuild\14.0\Bin\csi.exe
csi.exe
を実行するとインタープリターと対話できます。
> csi Microsoft (R) Visual C# インタラクティブ コンパイラ バージョン 1.2.0.60317 Copyright (C) Microsoft Corporation. All rights reserved. 詳細については、「#help」と入力します。 >
ここからはいつも通り C# のコードが書けます。関数や try
ステートメントもいけますね。
> private int AddOne(int i) . { . return i + 1; . } > AddOne(5) 6 > > try { . throw new Exception("an error"); . } . catch (Exception ex) { . Console.WriteLine(ex.Message); . Console.WriteLine("--------------------"); . Console.WriteLine(ex.StackTrace); . } an error -------------------- 場所 Submission#12.<<Initialize>>d__0.MoveNext() >
スクリプト
C# スクリプトは拡張子 .csx
とします。まずは簡単なファイルを用意します。
// test1.csx using System; private DateTime AddOneHour(DateTime dt) { return dt.AddHours(1); } Console.WriteLine("Hello csi."); Console.WriteLine("--------------------"); Console.WriteLine(AddOneHour(DateTime.Now))
スクリプトの実行は csi.exe
にファイル名を渡してあげます。
> csi test1.csx Hello csi. -------------------- 2017/01/17 19:04:48
クラス定義や MessageBox
もいけますね。
// test2.csx // アセンブリの参照は #r で始める #r "System.Windows.Forms" using System; using System.Windows.Forms; // メッセージボックスもいける MessageBox.Show("Hello csi."); // クラスもいける public class MyClass { public DateTime AddOneDay(DateTime dt) { return dt.AddDays(1); } } MyClass myClass = new MyClass(); Console.WriteLine(myClass.AddOneDay(DateTime.Now));
> csi test2.csx 2017/01/18 18:08:44
使いどころ
現在のところ Visual Studio に付属しているプログラムなので本番環境で利用することは難しいと思いますが、開発時にちょっとした確認が手軽にできるのは良いですね。 (「この数字、16進数だと何だっけ?」とか・・・ありますよね)
> 123.ToString("X") "7B"
more
今回は csi.exe
の本当にシンプルな使い方を試してみました。より深く知るにはこちらのページなどが足がかりになりそうです。
構成ファイル(config)へアクセスする際のパフォーマンス
開発部の緒方です。本日は開発メモです。
アプリケーションは、構成ファイル(config)で設定を変更できるようにします。
構成ファイルへのアクセスは当然ファイルI/Oが発生するため、都度読み込むとパフォーマンスが悪くなります。
そのため、起動時や最初のアクセス時に構成ファイルの内容をキャッシュするのが常套手段なのですが、.Net Frameworkの標準的な下記のクラス、メソッドを利用すると、この処理を自動で行ってくれます。
System.Configuration.ConfigurationManager.AppSettings
このクラス、メソッドを利用していれば、パフォーマンスの心配をする必要はありません。
もちろん、マルチスレッド対応です。
フレームワークらしい、素晴らしい実装ですね。
ドメインアカウントで Windows にログインできなくなった時にやること
開発部の本橋です。 今回は社内情シス的な Tips です。
ドメインアカウントで突然 Windows にログインできなくなる
ドメインに参加しているPCにログインしようとすると以下のようなメッセージが表示されログインできなくなってしまうことがあります。
このワークステーションとプライマリドメインとの信頼関係に失敗しました
滅多に遭遇することはないんですが、アカウントのパスワードを変更した直後に起こりやすいような気がします。
Microsoft 公式の KB2771040 にもあるように、一旦ドメインから抜けてもう一度参加しなおせば良いのですが、管理者グループに入ったローカルアカウントがないとできません。
キャッシュされた資格情報を利用する
スタンドアロンの Windows はキャッシュされた資格情報を利用してログインできますので*1、この仕組みを利用して復旧します。
- LANケーブルを抜く。
- ドメインのアカウント名とパスワードを入力する。
- この時、パスワードを変更した直後の場合は変更前のパスワードを入力する。
- ローカルアカウントを作成し、管理者グループに追加する。
- またはローカル administrator を有効化する。
- 一度ログアウトし、作成したローカルアカウントでログインする。
- ドメインから抜ける。
- LANケーブルを繋ぐ。
- ドメインにもう一度参加する。
これで通常通りドメインアカウントでPCにログイン出来るようになります。
*1:これを無効にしている場合はお手上げですが・・・