2010年6月17日木曜日

◆C#のクラスをPowershellから使う(Add-Type)

「Add-Type]は、PowerShell: ◆汎用フォームを作る4でも使った通りアセンブリーのロードにも使えるがC#のソースをコンパイルしてからロードするのにも使えるようだ。
こんな感じ、
$source=@"
using System.Windows.Forms;
public class TestClass{
    public void SayHello(string Name)
    {
        MessageBox.Show("★Hello " + Name);
    }
    public static string SayHelloStatic(string Name)
    {
        return "★こんにちは" + Name + "さん";
    }
}
"@
Add-Type -Language CSharp -TypeDefinition $Source -ReferencedAssemblies System.Windows.Forms
[TestClass]::SayHelloStatic("世界")
$testObj = New-Object TestClass

ヒア文字列でソースを定義し、Add-Typeに渡してやる。
参照設定は「ReferencedAssemblies」で。 言語はC#がデフォルトなので省略しても良い。
込み入った処理や、長い処理などは最初にVisualStudioで作ってから持ってくると良いかも・・・。
Add-Typeには1つ問題があって、一度コンパイルが通ったのちにソースを修正して再度実行すると、
Add-Type : 型を追加できません。型名 'TestClass' は既に存在しています。
発生場所 D:\PS\M06VBを利用する.ps1:16 文字:9
+ Add-Type <<<<  -Language CSharp -TypeDefinition $Source -ReferencedAssemblies System.Windows.Forms
    + CategoryInfo          : InvalidOperation: (TestClass:String) [Add-Type]、Exception
    + FullyQualifiedErrorId : TYPE_ALREADY_EXISTS,Microsoft.PowerShell.Commands.AddTypeCommand
ってなエラーになる。(セッションを開きなおせば良いのだが、都度やるのは面倒)
同じ悩みの人は見つけたが解決には至ってなさそう。
コマンドラインから子セッションを開いてそこで実行するしかないのかな。

0 件のコメント:

コメントを投稿