Я создаю сценарий 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
}