Set-DefaultScaffolder: не удается получить экземпляр EnvDTE.DTE при отладке пакета T4Scaffolding.Core Nuget — расширенная отладка Powershell

Я пытаюсь отладить пакет Nuget T4Scaffolding.Core из-за пределов Visual Studio 2012. Я использую Powershell ISE с установленным Powershell 3.0 и работаю под CLRVersion 4.0.30319.

Сначала я импортирую несколько элементов, связанных с Nuget: - Profile.ps1 - nuget.psm1 - NuGet.Cmdlets.dll

Я также устанавливаю текущее местоположение в set-location "\ClassLibrary1\" и получаю единственный запущенный экземпляр DTE (ранее я открывал MySolution в VS 2012, в котором есть библиотека классов и приложение asp.net MVC 4)

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

Я пропустил импорт командлета Get-Project из двоичного модуля NuGet.Cmdlets.dll, поэтому я могу создать свои собственные командлеты: Get-Project, который получает мой проект MVC следующим образом:

$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

Я также попытался указать на имя моего проекта $ (исключая -SolutionWide) с теми же результатами.:

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

Я мог заметить, что EnvDTE.dll загружается в среду Powershell ISE с помощью:

[System.Threading.Thread]::GetDomain().GetAssemblies()

Надеюсь, кто-то будет заинтересован в достижении той же цели (пошаговое выполнение init.ps1 и install.ps1 пакета Nuget вне Visual Studio).

Спасибо, Рэд

Переполнение стека: вопрос, который я использовал в качестве отправной точки




Ответы (1)


Я получил такое же сообщение об ошибке:

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

но по другому сценарию. Я использовал скаффолд в VS2015, установил T4Scaffolding.Core. Затем я нашел решение по этой ссылке:
Путем установки Windows Management Framework 4.0 ошибка исчезла, и мой скаффолд снова работает. Надеется, что это может помочь.

person Ctrl Zett    schedule 19.12.2015