2

PowerShell v3のリリースバージョンをインストールしましたが、-Versionパラメーターを機能させるのに問題があります。.NET 4.0を必要とするモジュールがかなりあり、次のpowershell.exe.configファイルを使用して問題なくPowerShellv2を使用しています。

<?xml version="1.0"?>
<configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">
        <supportedRuntime version="v4.0.30319"/>
        <supportedRuntime version="v2.0.50727"/>
    </startup>
    <runtime>
        <loadFromRemoteSources enabled="true"/>
    </runtime>
</configuration>

これにより、PowerShellv2を.NET4.0CLRで実行できるようになります。すべてが問題なく機能しました。

これでPowerShellv3のリリースバージョンをインストールしました。コマンド「powershell-version2」を使用して$PSVersionTable変数を確認すると、PowerShell v3(.NET 4.0を使用)が読み込まれていることが示されます。上記のファイルを削除しpowershell.exe.configて同じコマンドを実行すると、PowerShell v2が読み込まれているが、.NET2.0を使用していることが示されます。

だから私の質問はこれです:PowerShellv2をロードしてPowerShellv3をインストールする前に行っていたように.NET4.0 CLRを使用させる方法はありますか?または、PowerShell v3はこれを許可しませんか?

また、私がこれを行おうとしている理由についても言及する必要があります。主に、V3に切り替えたときに発生する可能性のある非互換性の問題がある場合に備えてです。私はすべてをV3でテストする予定ですが、V2に戻る機能があると、多くの頭痛の種から私たちを救うことができます。

4

2 に答える 2

5

何が起こっているかは次のとおりです。

  • 皮切りに-Version 2
  • Powershell が起動し、v2 ランタイム/アセンブリにバインドされます。ここまでは順調ですね。
  • App.config は、.NET 4 ランタイムをロードする必要があることを示しています
  • アセンブリ バインドが進行するにつれて、可能であれば v2 に対してビルドされたアプリを v3 に自動的にリダイレクトする .NET パブリッシャー ポリシーがあります。
    • これは通常、必要なものです。新しいバージョンが利用可能な場合は、自動的にそれを使用します
  • 結果は、v2 を実行するという最初の意図 (および Powershell) にもかかわらず、v3 ランタイム/アセンブリが読み込まれます。
    • v2 はデフォルトで .NET 2 の下で読み込まれるため、これは .NET 4 の回避策がないと発生しません。したがって、.NET 4 を必要とする v3 にパブリッシャー ポリシーによってリダイレクトすることはできません。

簡単ですよね?

したがって、.NET 4 で PSv2 を維持したい場合は、パブリッシャー ポリシーを手動で無効にする必要があります。これは app.config ファイルで行うことができます。関連記事はこちらを参照してください。

于 2012-09-06T20:13:57.177 に答える
0

v3がインストールされている場合にCLR4でv2を使用する理由がわかりません。モジュールに.NET4が必要な場合は、PowerShellv3を使用してください。すでにCLR4を使用しています。

于 2012-09-06T22:30:38.860 に答える