Ошибка после сборки при использовании gacutil и installutil для развертывания оснастки powershell

Я пытаюсь научиться писать snapin для powershell 4.0 с помощью VS 2013. Сценарий очень прост и скомпилирован без ошибок. Однако, когда я добавил gacutil и installutil для развертывания оснастки с использованием пост-сборки, я получил эту ошибку:

Error   1   
The command ""C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\x64\gacutil.exe" -if "Tools.Powershell.Printscreen.dll"
"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe" "Tools.Powershell.Printscreen.dll"" exited with code -1.

Однако, если я скопировал команды и запустил их из командной строки, обе команды были выполнены успешно, и установка была успешно развернута. Затем я могу добавить оснастку в powershell, оснастка также успешно работает.

Я проверил, и используемая структура была правильной 4.5.1, VS 2013, система Windows 8.1.

Команды после сборки:

"C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\x64\gacutil.exe" -if "$(TargetPath)"
"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe" "$(TargetPath)"

Я думаю, что на данный момент код оснастки не имеет значения, но если вы хотите, чтобы я включил его, дайте мне знать. Я не верю, что это повлияет на решение на данный момент, потому что оно в лучшем случае простое, и оно сработало после того, как я развернул его вручную с помощью командной строки.

Пожалуйста, порекомендуйте.

Спасибо!


person user1205746    schedule 31.07.2014    source источник


Ответы (1)


Зачем создавать оснастку, если вам не нужно ориентироваться на V1, что невозможно, если вы компилируете для .NET 4.5.1. Я бы рекомендовал использовать module. Регистрация/установка не требуется. Вы просто копируете модуль в целевую систему ($home\Documents\WindowsPowerShell\Modules) и используете его. Я бы порекомендовал вам создать файл манифеста PSD1 для вашего модуля. RootModule будет именем вашей dll: Tools.Powershell.Printscreen.dll. Ознакомьтесь с командой New-ModuleManifest, чтобы получить помощь в создании файла PSD1. Это базовые вещи, такие как имя автора, версия, GUID для уникальной идентификации модуля и т. д. Я также рекомендую перечислить экспортированные командлеты в поле CmdletsToExport. Это ускорит обработку для автоматической загрузки модуля.

И, в крайнем случае, для целей тестирования вы можете просто импортировать dll напрямую (без создания файла PSD1):

Import-Module -assembly c:\temp\Tools.Powershell.Printscreen.dll
person Keith Hill    schedule 31.07.2014
comment
Спасибо за ваш вклад, попробую вместо этого использовать модуль, так как я все еще новичок в оснастке powershell и Windows 8.1. Просто хочу убедиться, что правильно вас понял: я не могу использовать пост-сборку в VS2013 для автоматического развертывания оснастки, если моя версия powershell — V4. Правильный? Я все еще могу развернуть его вручную (что я и сделал, и, похоже, это работает). - person user1205746; 01.08.2014
comment
Нет, я не имел в виду — только эти модули были доступны начиная с версии 2. Вам необходимо использовать оснастку только в том случае, если вам нужно настроить таргетинг на PowerShell v1. Теоретически команды gacutil/installutil должны работать. Вы видели это сообщение SO: stackoverflow.com/questions/6656235/ - person Keith Hill; 01.08.2014
comment
Спасибо! Этот вопрос похож на мой, просто другая операционная система, Windows 8 вместо 8.1. У этого на самом деле была синтаксическая ошибка, и его пришлось запускать из команды, чтобы устранить неполадки. Мой работает нормально за пределами VS2013 (gac его и установить без проблем, но дал мне ошибку слева и справа, когда я использовал PostBuild). Это должно быть что-то в пост-сборке, что я пропустил. Кстати, выполнение xcopy на postbuild у меня тоже не сработало. Все еще ошибка, и если я скопирую ее из Command, у меня нет проблем. Может это баг VS2013? - person user1205746; 01.08.2014