Совместим ли MvcScaffolding с VS 2015?

Я недавно обновился до VS 2015, и теперь я получаю следующую ошибку, когда пытаюсь использовать один из моих каркасов:

Scaffold : Cannot get an instance of EnvDTE.DTE
At line:1 char:1
+ Scaffold Entity
+ ~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Invoke-Scaffolder], InvalidOperationException
    + FullyQualifiedErrorId : T4Scaffolding.Cmdlets.InvokeScaffolderCmdlet

Похоже, что аналогичная проблема с VS возникла раньше. 2013, но проблема была решена с помощью обновления 2.

Могу ли я что-то сделать, чтобы mvcScaffolding снова заработал, или есть новый способ формирования кода?

Вот пример одного из моих пользовательских лесов:

RestApi.ps1

[T4Scaffolding.Scaffolder(Description = "Enter a description of RestApi here")][CmdletBinding()]
param(
    [parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)][string[]]$EntityNames,
    [parameter(Mandatory = $false, ValueFromPipelineByPropertyName = $true)][string]$Inherit,    
    [string]$Project,
    [string]$CodeLanguage,
    [string[]]$TemplateFolders,
    [switch]$Force = $false
)

$outputPath = "ExampleOutput"  # The filename extension will be added based on the template's <#@ Output Extension="..." #> directive
$namespace = (Get-Project $Project).Properties.Item("DefaultNamespace").Value
$baseInherit = $Inherit
if($Inherit -eq ""){
    $baseInherit = "BaseRestController"
}

foreach($EntityName in $EntityNames){
    $split = $EntityName.Split(":")
    $EntityName = $split[0]
    if($split[1]){
        $Inherit = $split[1]
    }else{
        $Inherit = $baseInherit;
    }
    $Entities = Get-PluralizedWord $EntityName

    $outputPath = "ApiControllers\"+$Entities+"Api.cs"  # The filename extension will be added based on the template's <#@ Output Extension="..." #> directive
    Add-ProjectItemViaTemplate $outputPath -Template RestApiTemplate `
        -Model @{ 
            Namespace = $namespace;
            Entity = $EntityName;
            Entities = $Entities;
            Inherit = $Inherit
        } `
        -SuccessMessage "Added RESTApi at {0}" `
        -TemplateFolders $TemplateFolders -Project $Project -CodeLanguage $CodeLanguage -Force:$Force
}

RestApiTemplate.cs.t4

<#@ Template Language="C#" HostSpecific="True" Inherits="DynamicTransform" #>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using <#= Model.Namespace #>.Models;
using <#= Model.Namespace #>.Models.ViewModels;

namespace <#= Model.Namespace #>.ApiControllers {
    [RoutePrefix("api/<#= Model.Entities.ToLower() #>")]
    public class <#= Model.Entities #>Controller : <#= Model.Inherit #><<#= Model.Entity #>, <#= Model.Entity #>ViewModel> {
        public <#= Model.Entities #>Controller() : base("<#= Model.Entity #>"){
        }

        // Use StandardActions to override standard behavior
        #region StandardActions
        // GetById, All, Add, Update, Delete

        #endregion

        // Use ExtendedActions to add additional behavior to the API
        #region ExtendedActions

        #endregion
    }
}

person JustMaier    schedule 29.07.2015    source источник
comment
У вас есть какое-нибудь решение? последняя стабильная версия старше исправления 2013 года. Что насчет 2015 года   -  person BiLaL    schedule 13.09.2015
comment
nuget.org/packages/MvcScaffolding/1.0.9   -  person BiLaL    schedule 13.09.2015
comment
@BiLaL все еще не повезло. Я связался с первоначальными разработчиками MvcScaffolding, и они сказали, что не планируют поддерживать обновление 4 VS 2015 или VS 2013. Источник доступен здесь, может быть, кто-нибудь сможет заставить его работать...   -  person JustMaier    schedule 17.09.2015
comment
Спасибо за ответ и надеюсь, что однажды кто-то сможет продолжить его.   -  person BiLaL    schedule 17.09.2015


Ответы (1)


Я столкнулся с этой же ошибкой в ​​VS2015. Я вытащил исходный код, исправил ошибки и загрузил новые пакеты NuGet со связанными зависимостями. 3 новых пакета:

Сначала удалите MvcScaffolding и его зависимости, T4Scaffolding и T4Scaffolding.Core. Если затем вы просто установите пакет MvcScaffolding, другие пакеты будут загружены. Надеюсь, это поможет кому-то еще.

Ваше здоровье.

person David Douglas Anderson    schedule 28.09.2015
comment
Оно работает! Я переустановил VS2015, чтобы попробовать это. Я удалил VS2015 из-за других проблем (ошибка перехода к определению). Похоже, что последнее обновление VS2013 также вызывает проблемы с существующим пакетом MvcScaffolding. Являются ли ваши изменения открытым исходным кодом, и вы готовы поделиться тем, что вы сделали, чтобы я мог посмотреть, как сделать его совместимым с VS2013 Update 5? - person JustMaier; 29.09.2015
comment
Безусловно. Можете ли вы сначала подтвердить, работает ли новый пакет в VS2013, пожалуйста? Я жду отзывов от первоначальных авторов относительно того, могу ли я загрузить новый исходный код на Github. Исходный код можно найти здесь: mvcscaffolding.codeplex.com/SourceControl/latest. Я обновил серию dll новой ссылкой, чтобы разрешить их сборку, но основное исправление было в конструкторе T4Scaffolding.NuGetServices.Services.ScaffoldingSolutionManager. Обновить присвоение _dte с помощью: _dte= (DTE)Package.GetGlobalService(typeof(DTE)) ?? (DTE) Marshal.GetActiveObject(visualstudio.dte); Ваше здоровье. - person David Douglas Anderson; 30.09.2015
comment
Привет, Дэвид, я могу подтвердить, что новый пакет не работает в VS2013 с обновлением 5. Operation unavailable (Exception from HRESULT: 0x800401E3 (MK_E_UNAVAILABLE)). Есть ли другой набор DLL, который необходимо использовать для VS2013? - person JustMaier; 30.09.2015
comment
Я понимаю. Спасибо за проверку. Мне нужно будет переустановить VS2013 и перестроить под это, как я полагаю. Я оставлю это на ваше усмотрение, если хотите: github.com/processedbeets/ ASP.NET-MVC-Scaffolding Это моя версия исходного кода, поэтому она содержит исправление для 2015 года. Ура! - person David Douglas Anderson; 01.10.2015