これが PowerShell を使用して実行できるかどうかに興味がありました。
個人的に自動化したいのは、既存のローカル IIS Web サイトをソリューションに追加することです。
1 人が COM を使用してこれを実行しようとしたのを見ましたが、どうやらうまくいきませんでした。 Powershell を使用して Visual Studio 2012 を自動化していますが、間違っていますか?
これが PowerShell を使用して実行できるかどうかに興味がありました。
個人的に自動化したいのは、既存のローカル IIS Web サイトをソリューションに追加することです。
1 人が COM を使用してこれを実行しようとしたのを見ましたが、どうやらうまくいきませんでした。 Powershell を使用して Visual Studio 2012 を自動化していますが、間違っていますか?
PowerShell を使用して Visual Studio 2012 を自動化できます。パッケージ マネージャー コンソールは、実際には PowerShell ホストです。パッケージ マネージャー コンソールから、変数 $dte は、Visual Studio の大部分を自動化するために使用する COM オートメーション オブジェクトです。
詳細といくつかの例については、http://www.wintellect.com/blogs/jrobbins/using-nuget-powershell-to-replace-missing-macros-in-dev-11を参照してください。
これは古い質問だと思いますが、まだこれに興味がある人のために...
実際には、PowerShell スクリプトで使用する DTE オブジェクトの COM バインディングを取得する独自のコマンドレットを記述するためのコードはそれほど多くありません。動作するコマンドレットのソース コードについては、関連する質問に関する私の回答を参照してください。Get-DTE ...
DTE バインディングを取得したら、他の場所で見たすべての例とほとんど同じプロセスです。
PS C:\> Import-Module .\GetDTECmdlet.dll;
PS C:\> $dte = Get-DTE | Select-Object -First 1;
PS C:\> $dte = Get-DTE -ProcID 8547 | Select-Object -First 1;
PS C:\> $dte = Get-DTE -FromAncestorProcs | Select-Object -First 1;
PS C:\> $dte.ExecuteCommand('Help.About');
PS C:\> [Runtime.InteropServices.Marshal]::ReleaseComObject($dte); | Out-Null;
コマンドレットのソース コードは、私のようにビルド前/ビルド後のステップから DTE にアクセスする必要がない限り、おそらく少しやり過ぎです。しかし、それはあなたが始めるのに十分なはずです.
また、独自のコマンドレットの作成を本当に避けたい場合は、同じ質問でこの回答を確認できます。これは、コマンドレットの C# コードを PowerShellAdd-Type -TypeDefinition @"..."@
コマンドで本質的にラップしているため、まったく必要ありませんGetDTECmdlet.dll
。