関連するデータをグループ化して扱うのに非常に便利なPowerShellのクラスを使用しようとしています動作。単純化されたシナリオ:クラスを定義する1つのPSスクリプトとそのクラスを使用する別のスクリプト。PowerShell 5とクラス - "X"タイプの "X"値を "X"タイプに変換できません
Common.ps1
class X
{
[string] $A
}
Script1.ps1
. $PSScriptRoot\Common.ps1
[X] $v = New-Object X
すべてが良いです - あなたは問題なく回のScript1.ps1
任意の量を実行することができます - あなたまでany e in Common.ps1
。次のエラーが発生します。
Cannot convert the "X" value of type "X" to type "X". At D:\temp\PSIssue\Script1.ps1:3 char:1 + [X] $v = New-Object X + ~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : MetadataError: (:) [], ArgumentTransformationMetadataException + FullyQualifiedErrorId : RuntimeException
そのタイプX
はそれがために使用X
よりも異なってくるので、おそらくPSファイル内(あなただけ空白文字を追加しても)任意の変更は、その再コンパイルを強制する - 一時的な容器アセンブリが変更された(非常に同じ.NETで簡単に再現可能な問題 - "完全修飾アセンブリ名"が同じである限り、型は同じです)。 Script1.ps1
で変更すると、正常に機能します。
このような問題を解決する方法はありますか?
はい、同じ実行空間/セッション/のAppDomainにX ' 'の二つの異なる実装を使用していない(つまり、 。exit 'powershell、re-launch) –
@ MathiasR.Jessen、PowerShell ISEには、すべてをリロード/再コンパイルする方法はありますか?私は現在、完全に閉じていて、最初から開いています... –
エラーを無視して2回目にスクリプトを実行するとエラーが発生せず、再度実行された場合、更新されたクラスが取得されます。細かいテストのためには問題ありません。 – Matt