Visual Studio 2012 の外部から T4Scaffolding.Core Nuget パッケージをデバッグしようとしています。Powershell 3.0 をインストールして CLRVersion 4.0.30319 で実行する Powershell ISE を使用しています。
まず、いくつかの Nuget 関連アイテムをインポートします。 - Profile.ps1 - nuget.psm1 - NuGet.Cmdlets.dll
また、現在の場所を set-location "\ClassLibrary1\" に設定し、現在実行中の唯一の DTE インスタンスを取得しました (以前にクラス ライブラリと asp.net MVC 4 アプリケーションを含む VS 2012 で MySolution を開きました)。
$dte = [runtime.interopservices.marshal]::GetActiveObject("visualstudio.dte")
NuGet.Cmdlets.dll バイナリ モジュールから Get-Project コマンドレットをインポートするのをスキップしたので、独自のコマンドレットを作成できます。MVC プロジェクトを次のように取得する Get-Project:
$project = $dte.Solution.Projects.Item("MvcApplication1\MvcApplication1.csproj")
init.ps1: \packages\T4Scaffolding.Core.1.0.0\tools\init.ps1 にステップ インできますが、実行時にコードが失敗します。
Set-DefaultScaffolder -Name CustomTemplate -Scaffolder T4Scaffolding.CustomTemplate -SolutionWide -DoNotOverwriteExistingSetting
Set-DefaultScaffolder : Cannot get an instance of EnvDTE.DTE
At line:1 char:1
+ Set-DefaultScaffolder -Name CustomTemplate -Scaffolder T4Scaffolding.CustomTempl ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Set-DefaultScaffolder], InvalidOperationException
+ FullyQualifiedErrorId : T4Scaffolding.Cmdlets.SetDefaultScaffolderCmdlet
また、同じ結果で $project 名 (-SolutionWide を省略) を指定しようとしました。
Set-DefaultScaffolder -Name CustomTemplate -Scaffolder T4Scaffolding.CustomTemplate -Project ($project).Name -DoNotOverwriteExistingSetting
以下を使用して、EnvDTE.dll が Powershell ISE 環境にロードされていることを確認できました。
[System.Threading.Thread]::GetDomain().GetAssemblies()
誰かが同じ目標を達成することに興味を持ってくれることを願っています (Visual Studio 外の Nuget パッケージの init.ps1 と install.ps1 を 1 行ずつ実行する)。
ありがとう、ラド