在 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 为目标?