私は PowerShell のクラスを使用しようとしています。これは、関連するデータをグループ化する非常に便利な方法であり、動作を処理するのが非常に面倒です。簡単なシナリオ: クラスを定義する 1 つの PS スクリプトと、そのクラスを使用する別のスクリプト。
共通.ps1
class X
{
[string] $A
}
Script1.ps1
. $PSScriptRoot\Common.ps1
[X] $v = New-Object X
で変更Script1.ps1
を加えるまでは、すべて問題ありません。何回でも問題なく実行できますCommon.ps1
。次のエラーが発生します。
タイプ "X" の "X" 値をタイプ "X" に変換できません。 D:\temp\PSIssue\Script1.ps1:3 文字:1 + [X] $v = 新しいオブジェクト X + ~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : MetadataError: (:) []、ArgumentTransformationMetadataException + FullyQualifiedErrorId : RuntimeException
おそらく、PS ファイルに(空白を追加しただけでもX
) 何らかの変更が加えられると、その再コンパイルが強制されるため、その型は以前とは異なりX
ます - 一時的なコンテナー アセンブリが変更されました (まったく同じ問題が .NET で簡単に再現可能です - 型は「完全修飾アセンブリ名」が同じである限り)。変更するとScript1.ps1
、物事が再び正常に機能します。
このような問題を克服する方法はありますか?