我正在尝试从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)。
谢谢, 弧度
答案 0 :(得分:0)
我收到了同样的错误消息:
Set-DefaultScaffolder : Cannot get an instance of EnvDTE.DTE
但在不同的情况下。我在VS2015中使用脚手架,安装了T4Scaffolding.Core。然后我从this link找到了解决方案
通过安装Windows Management Framework 4.0,错误消失了,我的脚手架再次工作。
希望这可以提供帮助。