2007年04月26日

SQL Server 2005 を リモートデスクトップでインストール

   このエントリーをはてなブックマークに追加 Clip to Evernote
SQL Server 2005 を リモートデスクトップの機能を使い、サーバーにインストール
しようとしたら、エラーではじかれてしまいます。

手順は、

まずは、
リモートデスクトップの接続ダイアログの「オプション」ボタンを押して、ローカルリソースタブのローカルディスクにある「リモート コンピュータにログオンしたときに自動的に接続するローカル デバイス:」で、ディスクドライブにチェックをします。

これで、ログオンすれば、ローカルのCD-ROMドライブは、リモートデスクトップ上でもマイコンピュータ上に現れるようになります。
このドライブに SQL ServerのCDをセットし、SETUP.EXE を起動します。

途中までは、インストールが進むのですが、途中で「権限がない」と言われてしまい、先に進みません。

たしか、前にやったときは問題なくインストールできたと思ったのだけど。

どんな違いがあるのか、当時のことを思い出してみると、以前は、CD-ROMにあるファイルを、サーバーのローカルディスクにコピーし、そこから SETUP.EXEを起動していたことを思い出しました。

で、CD-ROMにあるファイルを サーバーにコピーして、インストールを開始。
無事、インストールできました。
  

Posted by gushwell at 23:43Comments(0)TrackBack(0)

2007年04月24日

Convert VB.NET to C#

   このエントリーをはてなブックマークに追加 Clip to Evernote
Developer Fusion というサイトに、「Convert VB.NET to C#」 というWebページを見つけました。

僕は、VB.NETのコードは書いたことがないので、ネットから拝借したコードをこのページで変換してみましたが、ちゃんと変換してるみたいです。
たまーに、VBしかサンプルが見つからないこともあるので、そんな時に、利用できそうです。

Convert VB.NET Code to C# というページもあります。

PCにインストールしなくても良いので便利です。


  
Posted by gushwell at 23:05Comments(0)TrackBack(0)

2007年04月18日

文字列の先頭1文字を大文字に変換する

   このエントリーをはてなブックマークに追加 Clip to Evernote
.NET FrameworkのString クラスには、文字列の先頭を大文字に変換するメソッドがない。
よく利用されると思われるので、Stringクラスにあれば良いのに、と思っていたら、別のクラスにありました。

System.Globalization.TextInfo クラスにあるToTitleCase メソッドです。
C#で書くとこんな感じ。

CultureInfo cultureInfo = Thread.CurrentThread.CurrentCulture;
TextInfo textInfo = cultureInfo.TextInfo;
stirng s = textInfo.ToTitleCase(title);


うーーん、ちょっと面倒ですね。

どうせなら、先頭を小文字にするのも用意されてれば良いのにな。  
Posted by gushwell at 22:49Comments(0)TrackBack(0)

2007年04月16日

Enterprise Library Configuration Tool の TypeSelectorEditor(2)

   このエントリーをはてなブックマークに追加 Clip to Evernote
前回の続きです。
今日の話題の中心は、AppDomain.AssemblyResolve イベントです。

TypeSelector.cs には、以下のようなコードがあります。

 private static Type[] LoadTypesFromAssembly(Assembly assembly) {
Type[] types = null;
try {
types = assembly.GetTypes();
} catch (ReflectionTypeLoadException) {
}
return types;
}


ここで、依存したアセンブリを読み込めないため、ReflectionTypeLoadException 例外が発生し、nullが返り、エラーメッセージが表示されてしまいます。
なお、引数で渡ってくる Assemblyは、Assembly.LoadFrom メソッドで、読み込まれた別フィルダにあるアセンブリのインスタンスです。

結局、TypeSelector.cs のTypeSelectorクラスに、以下のようなコードを追加して、対応しました。

  private static AppDomain currentDomain = AppDomain.CurrentDomain;

static TypeSelector() {
currentDomain = AppDomain.CurrentDomain;
currentDomain.AssemblyResolve += new ResolveEventHandler(ResolveEventHandler);
}

private static Assembly ResolveEventHandler(object sender, ResolveEventArgs args) {
Assembly myAssembly;
string tempAssmbPath = "";

string path = System.Environment.GetEnvironmentVariable(
"EntLibAsmPath", EnvironmentVariableTarget.Process);
foreach (string assemblyFolder in path.Split(';')) {
tempAssmbPath = System.IO.Path.Combine(assemblyFolder,
args.Name.Substring(0, args.Name.IndexOf(",")) + ".dll");
if (File.Exists(tempAssmbPath)) {
myAssembly = Assembly.LoadFrom(tempAssmbPath);
if (myAssembly != null) {
return myAssembly;
}
}
}
return null;
}


AppDomain.AssemblyResolve イベントはアセンブリの解決に失敗したときに発生します。
このイベントハンドラの引数の ResolveEventArgs.name プロパティには、解決するアセンブリ表示名が渡ってきますので、その情報を基に、アセンブリをロードするようにします。

これで、別ディレクトリにあるアセンブリを読み込むことが可能となります。

※このコードでは、環境変数に設定されているパスを検索しています。
  
Posted by gushwell at 23:40Comments(0)TrackBack(0)

2007年04月10日

Enterprise Library Configuration Tool の TypeSelectorEditor (1)

   このエントリーをはてなブックマークに追加 Clip to Evernote
前回、書いた[Enterprise Library Configuration Tool の TypeSelectorEditor]の内容に大きな勘違いがあったので、再度、内容を見直しました。

----

Enterprise Library Configuration Tool に 独自の構成設定を組み込んだ際に、ちょっと困ったことが発生しました。

独自ABを作成するときに、GUIで利用するNodeクラスを定義し、そのプロパティの属性を以下のように記述すると、Enterprise Library Configuration Tool で、型名を入力する際に、Type選択ダイアログが表示されるようになります。

public sealed class MyTaskNode : NameTypeConfigurationNode {

...

[Required]
[SRCategory("CategoryGeneral", typeof(Resources))]
[BaseType(typeof(Gushwell.SampleClass), TypeSelectorIncludes.None)]
[Editor(typeof(TypeSelectorEditor), typeof(UITypeEditor))]
public override string Type {
get { return _typeName; }
set {
if (null == value)
throw new ArgumentNullException("value");
_typeName = value;
}
}
}

このダイアログでは、読み込まれているアセンブリの中から、BaseType属性で指定したSampleClassの派生クラスをTreeViewに一覧表示してくれます。
しかし、BaseType属性で指定したクラスが、独自に定義したクラスだと、当然ながら読み込まれていないので、一覧には表示されません。
このような場合は、「Load Assembly...」というボタンを押し、指定したいクラスが定義されているアセンブリをロードさせることができます。

ここまでは、良いのですが、いざ、BaseTypeで指定した、Gushwell.SampleClass を継承したクラスが定義されているアセンブリを読み込もうとすると、


There were no types found in the assembly 'Sample' that
implement or inherit from the base type 'AbstractSample'.


というエラーダイアログが出てしまいます。

読み込むアセンブリファイルが、Enterprise Library Configuration Tool とは別のフォルダにあるため、依存したアセンブリが読み込めないようです。

ダイアログで読み込むアセンブリファイルを 全部 Enterprise Library Configuration Tool と同じフォルダに入れれば、回避できそうですが、それはやりたくありません。
同様に GACに入れれば、回避できますが、そのためだけに、GACに入れるのも良い解決策とは思えません。

結局、Enterprise Library のソースに手を入れるしか、方法はなさそうです。  
Posted by gushwell at 21:48Comments(0)TrackBack(1)

2007年04月03日

ユニットテストのファイルの配置

   このエントリーをはてなブックマークに追加 Clip to Evernote
Visual Studio 2005で、ユニットテストをするときに、アセンブリファイルや .configファイル以外のファイルが、実行に必要な場合があります。
例えば、 XMLファイルだったり、CSVファイルだったり、mdfファイルだったり、GIFファイルだったり。
Visual Studio のテスト実行環境は、テストを実行する度に、TestResultディレクトリの下に、新たなフォルダが作成され、そこでテストが行われるため、debug\binなどにファイルを置いても、これが利用できません。同様に、プロジェクトにファイルを追加し、そのプロパティの「出力ディレクトリにコピー」を「常にコピーする」に設定してもうまくいきません。

このような場合は、ユニットテストの構成ファイル .testrunconfigを編集することになります。
Visual StudioのIDEの[テスト]-[テストの実行構成の編集]を選んで、.testrunconfigの編集ダイアログを表示させます。
このダイアログの「配置」ページで、必要なファイルを追加することで、実行に必要なファイルを、テスト用フォルダにコピーすることができます。  
Posted by gushwell at 21:09Comments(2)TrackBack(0)