如何在PowerShell中更改对象类型程序集

时间:2013-12-03 21:25:26

标签: c# .net powershell

我遇到的问题是SelectedIndexChanged事件未在我System.Windows.Forms.ComboBox对象上触发,但仅在我的计算机上。它可以在其他人的计算机上正常工作。

当我在对象上运行GetType().assembly时,我的计算机显示.Net 4.0,但其他人都是2.0。

如何将对象强制为2.0?

以下是相关装配导入:

[reflection.assembly]::loadwithpartialname("System.Windows.Forms")  | Out-Null

enter image description here

2 个答案:

答案 0 :(得分:3)

PowerShell会自动从PowerShell运行的.Net版本加载程序集。 因此,指向v2.0程序集可能仍会强制它加载v4.0程序集。

由于您加载v4.0程序集,您可能不使用PS1,而是使用PS3或4,然后简单的解决方案是使用以下方式在2.0模式下运行PowerShell:

powershell.exe -version 2

答案 1 :(得分:2)

您确定使用的是PowerShell v1吗?这应该是CLR v2而不是加载.Net 4.0程序集。您的代码应该加载2.0程序集。如果不是这样,那么您的powershell v1是configured to load CLR v4。那或你正在使用PowerShell v3或更高版本。

尝试$ PSVersionTable并查看其内容。

如果它读取PSVersion 1或2,则撤消对PowerShell的更改,使其使用CLR v4。如果它读取更高版本,那么就没有办法了。 .Net框架程序集将始终加载4.0版本。

在任何情况下,我都不希望它解释你的事件没有解雇。

<强>更新

As Graimer notes,您可以将较新的PowerShell版本加载为旧版本,包括较旧的CLR版本。