在 Mvc 5、EF6、Visual Studio 2013 中使用存储库的脚手架控制器

Posted

技术标签:

【中文标题】在 Mvc 5、EF6、Visual Studio 2013 中使用存储库的脚手架控制器【英文标题】:Scaffolding controllers with repositories in Mvc5, EF6, VisualStudio 2013 【发布时间】:2013-10-05 12:54:11 【问题描述】:

在 vs2012 中,我曾经将 Steve Sanderson 的 mvcScaffolding Package 与这个包一起使用,我可以用单元测试和具有存储库和依赖注入的控制器构建动作方法。 我的问题很简单。在vs2013中有没有办法做到这一点? 当我在 vs2013 中安装软件包时,出现以下错误:

Set-DefaultScaffolder : Cannot get an instance of EnvDTE.DTE
At C:\dev\WebApplication2\packages\T4Scaffolding.Core.1.0.0\tools\init.ps1:50 char:9
+         Set-DefaultScaffolder -Name CustomTemplate -Scaffolder T4Scaffolding.Cus ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Set-DefaultScaffolder], InvalidOperationException
    + FullyQualifiedErrorId : T4Scaffolding.Cmdlets.SetDefaultScaffolderCmdlet

Set-DefaultScaffolder : Cannot get an instance of EnvDTE.DTE
At C:\dev\WebApplication2\packages\T4Scaffolding.Core.1.0.0\tools\init.ps1:51 char:9
+         Set-DefaultScaffolder -Name CustomScaffolder -Scaffolder T4Scaffolding.C ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Set-DefaultScaffolder], InvalidOperationException
    + FullyQualifiedErrorId : T4Scaffolding.Cmdlets.SetDefaultScaffolderCmdlet

Set-DefaultScaffolder : Cannot get an instance of EnvDTE.DTE
At C:\dev\WebApplication2\packages\T4Scaffolding.1.0.8\tools\init.ps1:6 char:1
+ Set-DefaultScaffolder -Name DbContext -Scaffolder T4Scaffolding.EFDbContext -Sol ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Set-DefaultScaffolder], InvalidOperationException
    + FullyQualifiedErrorId : T4Scaffolding.Cmdlets.SetDefaultScaffolderCmdlet

Set-DefaultScaffolder : Cannot get an instance of EnvDTE.DTE
At C:\dev\WebApplication2\packages\T4Scaffolding.1.0.8\tools\init.ps1:7 char:1
+ Set-DefaultScaffolder -Name Repository -Scaffolder T4Scaffolding.EFRepository -S ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Set-DefaultScaffolder], InvalidOperationException
    + FullyQualifiedErrorId : T4Scaffolding.Cmdlets.SetDefaultScaffolderCmdlet

Set-DefaultScaffolder : Cannot get an instance of EnvDTE.DTE
At C:\dev\WebApplication2\packages\MvcScaffolding.1.0.9\tools\init.ps1:47 char:1
+ Set-DefaultScaffolder -Name Controller -Scaffolder MvcScaffolding.Controller -So ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Set-DefaultScaffolder], InvalidOperationException
    + FullyQualifiedErrorId : T4Scaffolding.Cmdlets.SetDefaultScaffolderCmdlet

Set-DefaultScaffolder : Cannot get an instance of EnvDTE.DTE
At C:\dev\WebApplication2\packages\MvcScaffolding.1.0.9\tools\init.ps1:48 char:1
+ Set-DefaultScaffolder -Name Views -Scaffolder MvcScaffolding.Views -SolutionWide ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Set-DefaultScaffolder], InvalidOperationException
    + FullyQualifiedErrorId : T4Scaffolding.Cmdlets.SetDefaultScaffolderCmdlet

Set-DefaultScaffolder : Cannot get an instance of EnvDTE.DTE
At C:\dev\WebApplication2\packages\MvcScaffolding.1.0.9\tools\init.ps1:49 char:1
+ Set-DefaultScaffolder -Name Action -Scaffolder MvcScaffolding.Action -SolutionWi ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Set-DefaultScaffolder], InvalidOperationException
    + FullyQualifiedErrorId : T4Scaffolding.Cmdlets.SetDefaultScaffolderCmdlet

Set-DefaultScaffolder : Cannot get an instance of EnvDTE.DTE
At C:\dev\WebApplication2\packages\MvcScaffolding.1.0.9\tools\init.ps1:50 char:1
+ Set-DefaultScaffolder -Name UnitTest -Scaffolder MvcScaffolding.ActionUnitTest - ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Set-DefaultScaffolder], InvalidOperationException
    + FullyQualifiedErrorId : T4Scaffolding.Cmdlets.SetDefaultScaffolderCmdlet

Set-DefaultScaffolder : Cannot get an instance of EnvDTE.DTE
At C:\dev\WebApplication2\packages\MvcScaffolding.1.0.9\tools\init.ps1:54 char:1
+ Set-DefaultScaffolder -Name View -Scaffolder $viewScaffolder -SolutionWide -DoNo ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Set-DefaultScaffolder], InvalidOperationException
    + FullyQualifiedErrorId : T4Scaffolding.Cmdlets.SetDefaultScaffolderCmdlet

【问题讨论】:

【参考方案1】:

我们正在迁移到一个新的脚手架系统,但现在,以管理员身份运行 VS 并使用我们更新的这个 -pre 版本:

安装包 MvcScaffolding -Version 1.0.8-vs2013 -Pre

我会写博客。

【讨论】:

截至今天,我也遇到了这个问题。现在,我似乎也无法卸载它。我永远都会收到上面相同消息的部分内容。 如果你使用 VS2013 并且你一直在试图找到确切的箍来让 MvcMailer 工作感到沮丧,请尝试删除所有失败的包安装(并可能从你的packages 文件夹[通常与您的解决方案处于同一级别]),然后运行上述内容,然后运行 ​​VS2013 的 MvcMailer(安装包 MvcMailer-vs2013 -pre)。至少,这对我有用,不需要管理员权限(我的工作工作站上没有)。【参考方案2】:

您得到的错误是它无法创建 VS IDE (EnvDTE.DTE) 的实例。该脚手架包引用了旧版本的 VS IDE,因此它在 VS2013 中不起作用。该项目必须更新以正确支持 VS2013。

codeplex 项目看起来已经有一段时间没有更新了,所以我的猜测是,除非项目移动到不同的开源存储库,否则它已经死了。

由于 ASP.NET 现在内置了自己的脚手架,我建议是时候转换过来了。

【讨论】:

【参考方案3】:

在命令行中试试这个: cd C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\ devenv.exe /setup "Extensions\Microsoft\Web\Mvc\Scaffolding\Microsoft.AspNet.Scaffolding.Mvc.5.0.dll"

【讨论】:

嗯......这会得到它,直到重新启动vstudio,此时它又消失了。不知道为什么。奇怪。【参考方案4】:

为了解决 VS2013 Update 4 上的这个问题,我必须卸载所有模块,在 .\packages 目录中删除所有 T4*,退出 VS。

再次输入,并使用 wittness 的解决方案,在包管理器控制台上执行: Install-Package MvcMailer-vs2013 -pre,瞧,从那时起它的工作......

感谢一切

【讨论】:

【参考方案5】:

我知道这是不久前发布的,但是,我在使用 MvcScaffolding 时在 VS2015 中遇到了同样的错误。实际的错误在于 T4Scaffolding.Core 包。我提取了源代码,修复了错误,并上传了带有链接依赖项的新 NuGet 包。 3 个新软件包是:

MvcScaffolding.VS2015 T4Scaffolding.VS2015 T4Scaffolding.Core.VS2015

首先卸载 MvcScaffolding 及其依赖项、T4Scaffolding 和 T4Scaffolding.Core。如果您然后简单地安装 MvcScaffolding 包,其他包将被拉出。希望这对其他人有帮助。

干杯。

【讨论】:

以上是关于在 Mvc 5、EF6、Visual Studio 2013 中使用存储库的脚手架控制器的主要内容,如果未能解决你的问题,请参考以下文章

在Visual studio 2017中使用EF6连接MySQL

如何在 Visual Studio 2012 中安装 ASP.NET MVC 5?

Visual Studio 2013 中带有 EF6 的 MySQL 连接器

在 Visual Studio 2010 中使用 ASP.NET MVC2 Web 应用程序以 .NET3.5 为目标?

带有 Visual Studio 2012 RC 的 MVC 4 / Razor 中的可移植类库?

visual studio 2015 MVC项目区域问题