Не удается зарегистрировать оснастку C# Powershell

Я видел кучу подобных вопросов, но до сих пор не могу понять, как их решить: у меня есть простой командлет powershell (который просто добавляет параметры) и оснастка для его регистрации. Проблема в том, что я пытаюсь запустить installutil и получаю

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

Код для оснастки:

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

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

    }
}

Я знаю, что существуют 64- и 32-битные версии installutil, а также x86 и x64 powershells. Моя конфигурация - 64-битная машина, целевая платформа "Любой процессор", .NET Framework 4.5. Я не мог ссылаться на System.Management.Automation из селектора ссылок Visual Studio, поэтому я вручную изменил файл csproj с помощью

<Reference Include="System.Management.Automation" />

Какую версию installutil я должен запускать в какой версии powershell? (Я думаю, что пробовал каждую комбинацию, но все равно получаю ту же проблему).

Еще один вопрос: после этого мне нужно будет взаимодействовать с 32-битным COM-объектом, как мне настроить проект?


person John Smith    schedule 14.11.2013    source источник


Ответы (1)


Если вы ориентируетесь на PowerShell V1/V2, вам следует ориентироваться на .NET 2.0. Если вы ориентируетесь на V3/V4, вам следует ориентироваться на .NET 4.0. Если вам не нужно поддерживать V1, не используйте оснастку вообще. Ваш двоичный файл может остаться прежним, за исключением того, что вам не нужен класс PSSnapin и вам не нужно запускать installutil. Вы просто загружаете его либо по абсолютному пути:

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

Или, если вы поместите dll в каталог модулей (~\Documents\WindowsPowerShell\Modules\MyBinary\MyBinary.dll), просто по имени:

Import-Module MyBinary
person Keith Hill    schedule 14.11.2013