3

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 行ずつ実行する)。

ありがとう、ラド

スタック オーバーフロー: 出発点として使用した質問

4

1 に答える 1

0

同じエラーメッセージが表示されました:

Set-DefaultScaffolder : Cannot get an instance of EnvDTE.DTE

しかし、別のシナリオで。T4Scaffolding.Core をインストールした VS2015 で scaffold を使用していました。次に、このリンクから解決策を見つけました Windows Management Framework 4.0
をインストールすると、エラーがなくなり、足場が再び機能します。これが役立つことを願っています。

于 2015-12-19T05:23:14.560 に答える