System.Activitiesワークフローアクティビティをツールボックスに追加できるPowerShellスクリプト(NuGet用)を作成しています。PowerShellスクリプトからツールボックスにワークフローアクティビティを追加する際に問題が発生する
現在、私はそれらをコマンドレットとして書かれたC#コードでインストールしていますが、NuGetにアセンブリがロードされていて削除できないため、パッケージをアンインストールしようとすると問題が発生します。
私の目標は、PowerShellからすべてを行うことです。そのため、アセンブリを読み込む必要はありません。私はツールボックス項目を追加する最後の行を除いて、 "Object on 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
}
Hey! Mr Ron Server AppFabric Jacobs!私はあなたのためにこれを見ていきます(多くのPowerShellのものを担当するNuGetコア開発者であり、MS powershell MVPは私をよく熟知させてくれます - そしてまた私はあなたの勝利サーバーappfabric仕事を愛しています:)) – x0n
btw、これらの問題の多くは、COMオブジェクトがタイプライブラリで動作する「アダプタ」でラップされ、インタラクティブでスクリプティングの使用に最適化されたユーザーフレンドリーなエクスペリエンスを提供するため、powershellで発生します。多くの場合、あなたはPIAや未処理のCOM参照を渡していると思いますが、そうではありません。これは、PIAなどが必要な管理対象APIを呼び出そうとしているとき、さまざまな問題につながります。 – x0n
はい - 私は内部の人々の大部分にこの1つを困らせました。これまでに学んだことは、NuGetConsole.Host.MethodBinder.ChangeTypeが何かの型を変更する必要があると考えているため、例外が実際にスローされているということです。私はNuGetの人に助けを頼んだので、何が現れるかを見ていきます。 –