2011-01-14 12 views
4

小さなPowerShellモジュールを実装しました。私は.psm1ファイルの型をC#クラスとして定義し、それにAdd-Typeを追加しました。さて、モジュールを追加してもう一度取り除くと、型はまだそこにあります。おそらくは正しくありません(たとえば、モジュールの再追加を防ぐ)。 Remove-Moduleのドキュメントには、モジュールによってロードされたアセンブリで定義された型もアンロードされると記載されています。しかし、私のモジュールは、ソースコード形式の単なる小さなタイプのアセンブリではない。PowerShell 2モジュールの種類

私は型を独自のDLLに入れてモジュールマニフェストにロードするアセンブリとしてマークすることができますが、現在どのようにソースコードが目に見えているのが好きです。モジュールを使ってDLLを配布すると、なぜ実行可能ファイルが必要なのか不審な点が増えます。

モジュールをアンロードするときに何らかの形で型を取り除くことができますか?または、私はちょうど少なくとも1つのセッションから削除されたモジュールを再追加することが可能であるためにAdd-Typeで潜在的なエラーを無視する必要がありますか?私はむしろそこにDLLを置くことを避けたいと思う(とにかくその小さなモジュールのためにとにかく過剰な)。

答えて

6

のドキュメントでは、アセンブリがアンロードされていないとも言われています。これは、.NETとCLRの基本的な問題です。アセンブリをAppDomainにロードすると、アンロードできません。したがって、独自のDLL(管理アセンブリ)を作成することは役に立ちません。

ここでは、new-object psobject -prop @{...}$obj.psobject.typenames.insert(0, 'newtypename')を使用して、Add-Typeを避けてカスタムタイプを作成することはできません。

+0

Hmは、少なくとも新しいことを学んだ。 'PSObject'にはそうした魔法があることは知らなかった。私が新しいタイプを作成した主な理由は、( 'ps1xml'ファイルを介して)フォーマットを制御し、' PSObject'よりも良いタイプの名前を持つことでした。しかし、明らかにこれはちょうど同様に機能します、ちょうどもう少しハックを感じます:-)ありがとう。 – Joey