Set-DefaultScaffolder:在调试T4Scaffolding.Core Nuget包时无法获取EnvDTE.DTE的实例 - 高级Powershell调试

时间:2013-01-10 10:58:14

标签: debugging visual-studio-2012 nuget-package powershell-ise t4scaffolding

我正在尝试从Visual Studio 2012外部调试T4Scaffolding.Core Nuget包。 我正在使用安装了Powershell 3.0的Powershell ISE,并在CLRVersion 4.0.30319下运行。

我首先导入几个与Nuget相关的项目: - Profile.ps1 - nuget.psm1 - NuGet.Cmdlets.dll

我也将当前位置设置为设置位置“\ ClassLibrary1 \” 并获得了当前运行的唯一DTE实例(我之前在VS 2012中打开了MySolution,其中包含一个类库和一个asp.net MVC 4应用程序)

$dte = [runtime.interopservices.marshal]::GetActiveObject("visualstudio.dte")

我跳过从NuGet.Cmdlets.dll二进制模块导入Get-Project cmdlet,因此我可以创建自己的cmdlet:Get-Project 以这种方式获得我的MVC项目:

$project = $dte.Solution.Projects.Item("MvcApplication1\MvcApplication1.csproj")

我可以进入init.ps1:   \包\ T4Scaffolding.Core.1.0.0 \工具\ 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

我也尝试使用相同的结果指向我的$项目名称(省略-SolutionWide)。:

Set-DefaultScaffolder -Name CustomTemplate -Scaffolder T4Scaffolding.CustomTemplate -Project ($project).Name -DoNotOverwriteExistingSetting

我可以通过使用:

观察到EnvDTE.dll被加载到Powershell ISE环境中
[System.Threading.Thread]::GetDomain().GetAssemblies()

希望有人会对实现相同的目标感兴趣(逐步通过init.ps1和Visual Studio外部的Nuget包的install.ps1)。

谢谢, 弧度

Stack Overflow: question I used as a starting point

1 个答案:

答案 0 :(得分:0)

我收到了同样的错误消息:

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

但在不同的情况下。我在VS2015中使用脚手架,安装了T4Scaffolding.Core。然后我从this link找到了解决方案
通过安装Windows Management Framework 4.0,错误消失了,我的脚手架再次工作。 希望这可以提供帮助。