Проблема при добавлении действия рабочего процесса на панель инструментов из скрипта PowerShell - PullRequest
2 голосов
/ 02 июля 2011

Я создаю сценарий PowerShell (для NuGet), который может добавлять действия System.Activities Workflow в панель инструментов.

В настоящее время я устанавливаю их с кодом C #, написанным как командлет, но это вызывает проблемы, когдавы пытаетесь удалить пакет, так как сборка NuGet загружена и ее нельзя удалить.

Моя цель - сделать все из PowerShell, чтобы мне не приходилось загружать сборку.Я очень близок, за исключением последней строки, где я добавляю элемент панели инструментов с надписью «Объект должен реализовывать IConvertible».Это заставляет меня поверить, что он думает, что что-то, что я передаю, имеет неправильный тип ... Я знаю, что интерфейс $ toolbox работает, потому что он добавляет вкладку в панель инструментов.

function AddActivity ( 
[string] $activity, 
[string] $assemblyFullname,  
[string] $name,  
[string] $category, 
[string] $bitmapPath)
{
    Write-Host "Argument List"
    Write-Host $activity
    Write-Host $assemblyFullname 
    Write-Host $name  
    Write-Host $category 
    Write-Host $bitmapPath

    Write-Host "Loading assemblies"
    $assembly = [Reflection.Assembly]::Load("Microsoft.VisualStudio.Shell.Interop")

    Write-Host "get the toolbox service"
    Write-Host "get the toolbox service"
    $ServiceType = [System.Type]::GetType("Microsoft.VisualStudio.Shell.Interop.SVsToolbox,{0}" -f $assembly.FullName)      
    $InterfaceType = [System.Type]::GetType("Microsoft.VisualStudio.Shell.Interop.IVsToolbox,{0}" -f $assembly.FullName) 
    $toolbox = Get-VSService $ServiceType $InterfaceType    

    Write-Host "Add a Tab"
    $tlBoxTab = $toolbox.AddTab($category)

    Write-Host "Create the DataObject"
    $dataObject = New-Object Microsoft.VisualStudio.Shell.OleDataObject
    $dataObject.SetData("AssemblyName", $assemblyFullname)
    $dataObject.SetData("CF_WORKFLOW_4", $name) 
    $dataObject.SetData("WorkflowItemTypeNameFormat", ('{0}{1}' -f $activity, $assemblyFullname))

    Write-Host "Load the bitmap {0}" $bitmapPath
    Write-Host "$bitmapPath"
    $bitmap = new-object System.Drawing.Bitmap $bitmapPath

    $toolboxItemInfo = new-object Microsoft.VisualStudio.Shell.Interop.TBXITEMINFO;
    $toolboxItemInfo.bstrText = $name
    $toolboxItemInfo.hBmp = $bitmap.GetHbitmap()
    $toolboxItemInfo.clrTransparent = [System.UInt32][System.Drawing.ColorTranslator]::ToWin32([System.Drawing.Color]::White)

    #Create an array with one element
    $tbiArray = [Microsoft.VisualStudio.Shell.Interop.TBXITEMINFO[]] ($toolboxItemInfo)

    Write-Host "Add the item - this will blow up"
    $toolbox.AddItem($dataObject, $tbiArray, $category) 

    # Exception calling "AddItem" with "3" argument(s): "Exception calling "InvokeMethod" with "3" argument(s): "Object must implement IConvertible.""
    # At C:\users\rojacobs\documents\visual studio 2010\Projects\WorkflowConsoleApplication24\packages\Microsoft.Activities.1.8.4.630\tools\install.ps1:53 char:21
    # +     $toolbox.AddItem <<<< ($dataObject, $tbiArray, $category)    
    #     + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    #     + FullyQualifiedErrorId : ScriptMethodRuntimeException
}

1 Ответ

0 голосов
/ 16 февраля 2012

Рон, я думаю, что проблема может быть связана с категорией. В соответствии с документацией, которую я посмотрел, категория должна быть локализованным именем (http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivstoolbox.additem.aspx), которое можно восстановить с помощью GetIDOfTab (http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivstoolbox3.getidoftab.aspx).

Дайте мне знать, если это поможет.

...