无法注册C#Powershell snapin

时间:2013-11-14 12:51:27

标签: c# powershell cmdlets installutil

我看过很多类似的问题,但仍然无法弄清楚如何解决它:我有一个简单的PowerShell cmdlet(只是添加参数)和一个snapin来注册它。问题是我尝试运行installutil我得到

No public installers with the RunInstallerAttribute.Yes attribute could be found

snapin代码:

using System.ComponentModel;
using System.Management.Automation;

namespace Cmdtlets
{
    [RunInstaller(true)]
    class BugBoxSnapin : PSSnapIn
    {

    }
}

我知道有64个32位版本的installutil以及x86和x64 powershells。 我的配置是 - 64位机器,平台目标“任何CPU”,.NET Framework 4.5。我无法从visual studio引用选择器引用System.Management.Automation,所以我用

手动更改了csproj文件
<Reference Include="System.Management.Automation" />

我应该在哪个版本的powershell中运行哪个版本的installutil? (我想我尝试了所有组合,但仍然遇到同样的问题)。

还有一个问题:在这项工作之后,我将需要与32位COM对象进行交互,我该如何设置项目?

1 个答案:

答案 0 :(得分:5)

如果您的目标是PowerShell V1 / V2,那么您应该定位.NET 2.0。如果您定位到V3 / V4,则应该定位到.NET 4.0。如果您不必支持V1,那么请不要在中使用管理单元。您的二进制文件可以保持不变,除了您不需要PSSnapin类并且您不需要运行installutil。您只需通过绝对路径加载它:

Import-Module -Path c:\temp\mybinary.dll

或者如果你把dll放在Modules目录(〜\ Documents \ WindowsPowerShell \ Modules \ MyBinary \ MyBinary.dll)中,只需按名称:

Import-Module MyBinary