.NET メールのDateフィールド値をDateTimeに変換

下記のような、メールヘッダのDate値を変換する。 Date: Sun, 02 Jul 2006 19:45:13 +0100 CultureInfoを en-US にしないと、曜日、月の省略語を正しく認識できない。 // 変換に失敗すると FormatException を投げる。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public static DateTime ParseMailDate(string field){ // (JST) などを取り払う int i = field.LastIndexOf("("); if (i > -1){ field = field.Substring(0, i).TrimEnd(); } string[] expectedFormats = {"ddd, d MMM yyyy HH':'mm':'ss zzz", "ddd, d MMM yyyy H':'m':'s zzz", "d MMM yyyy HH':'mm':'ss zzz", "ddd, d MMM yyyy HH':'mm':'ss", "ddd, d MMM yyyy H':'m':'s", "d MMM yyyy HH':'mm':'ss"}; // ゴミがあったら削除 if (field.Length > 31) { field = field.Substring(0, field.LastIndexOf(' ') - 1); } return System.DateTime.ParseExact(field, expectedFormats, System.Globalization.CultureInfo.GetCultureInfo("en-US"), System.Globalization.DateTimeStyles.None); }

2007年4月24日 · Toshimitsu Takahashi

.NET ActiveX のラッパーを厳密な名前で署名して生成

C:\Program Files\\Microsoft Visual Studio 8\SDK\v2.0\\Bin をパスに通しておく。 下記の SHDocVw.dll の場合、AxSHDocVw.dll, SHDocVw.dll > sn -k shdocvw.snk > aximp /keyfile:shdocvw.snk %WINDIR%\\system32\\shdocvw.dll

2007年2月12日 · Toshimitsu Takahashi

.NET 2.0 での変更点

COMType WebProxy XmlReaderSettings Invoke のコンパイルチェックが厳格に 2.0は無名メソッドが可能なので内部定義。下記はツリーノードを別スレッドから削除している。 Control.Invoke では、System.Delegate の MethodInvoker にキャストしてやる。 if (node.TreeView != null) { node.TreeView.Invoke((System.Windows.Forms.MethodInvoker)delegate() { node.Remove(); }); } System.AppDomain.GetCurrentThreadId() は古い形式です System.Threading.Thread.CurrentThread.ManagedThreadId を使う。

2007年2月11日 · Toshimitsu Takahashi

.NET 1.1 でインストーラでCLRからネイティブにコードをコンパイル

カスタム動作でngenを呼び出す。インストーラクラスを作成し下記を定義する。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 public override void Install(IDictionary stateSaver) { base.Install (stateSaver); doNgen(getArgument(), false); } public override void Uninstall(IDictionary savedState) { base.Uninstall(savedState); doNgen(getArgument(), true); } private string getArgument() { string args = this.Context.Parameters\["Args"\]; if (args.Length == 0) { throw new InstallException("No arguments specified"); } return args; } private void doNgen(string fileName, bool delete) { const char DOUBLEQUOTE = '\"'; StringBuilder sbArgs = new StringBuilder(); if (delete) { sbArgs.Append("/delete "); } sbArgs.Append(DOUBLEQUOTE); sbArgs.Append(fileName); sbArgs.Append(DOUBLEQUOTE); ProcessStartInfo psi = new ProcessStartInfo( System.IO.Path.Combine(GetClrInstallationDirectory(), "ngen.exe"), sbArgs.ToString()); psi.WindowStyle = ProcessWindowStyle.Hidden; try { Process process = Process.Start(psi); process.WaitForExit(); } catch(Exception ex) { throw new InstallException(ex.Message); } } private static string GetClrInstallationDirectory() { const int MAX_PATH_LEN = 260; StringBuilder sb = new StringBuilder(MAX_PATH_LEN); int pathlen = MAX_PATH_LEN; GetCORSystemDirectory(sb, MAX_PATH_LEN, ref pathlen); return sb.ToString(); } あとは、下記としてEXE, DLLファイルを指定した動作を定義する。 CustomActionData: /Args="[TARGETDIR]xxxx.dll" アンインストール時は CustomActionData: /Args="xxxx"

2007年2月3日 · Toshimitsu Takahashi