2010-05-04 43 views
32

在VS 2010中,如果您使用的是实体框架,则在MVC2项目的.csproj文件中更改<MvcBuildViews>true</MvcBuildViews>会导致错误。MvcBuildViews true在ASP.NET MVC中使用实体框架2

Could not load type 'System.Data.Entity.Design.AspNet.EntityDesignerBuildProvider'. C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config 129

我想在构建视图的同时进行调试,并且我也希望我的项目能够编译!

回答

58

可以解决这个MVC通过将以下元素添加到Web.config文件编译的问题:

<add assembly="System.Data.Entity.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 

这将告诉编译器在哪里找缺少的类型。

+5

明显的和合乎逻辑的解决方案。谢谢。但为什么这样表现呢?为什么我需要将System.Data.Entity.Design命名空间添加到我的程序集中,这与我的代码无关。我Visual Studio的工作,它不应该被添加到我的应用程序。 – 2010-05-13 17:01:46

+1

有谁知道为什么会发生这种情况? – BrianFinkel 2012-10-03 23:55:13

+7

进入'' - 拯救任何人解决这个问题的麻烦。参考http:// stackoverflow。com/a/10078384/10245 – 2014-10-30 12:16:08

0

我在设置MvcBuildViews="true"时遇到了类似的错误,该错误与构建临时文件并因此不喜欢它而发现多个web.configs的构建有关。

这是一个完全不同的错误,但我有一个鬼鬼祟祟的怀疑,他们可能与...

你可以找到原来的问题我有here然后将溶液概述here

该解决方案基本上可以让您更改输出路径的位置,因此您需要将<BaseIntermediateOutputPath>添加到您网站的csproj文件中。

E.g.

<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    ...BLAH... 
    <BaseIntermediateOutputPath>..\TempBuildOutput</BaseIntermediateOutputPath> 
    </PropertyGroup> 
    ...A WHOLE LOTTA BLAH... 
</Project> 

HTHS,
查尔斯

2

这是一个完整的例子web.config中

<configuration> 
<system.web> 
    <customErrors mode="Off"/> 
     <compilation debug="true" targetFramework="4.0"> 
<assemblies> 
    <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />  
    <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
    <add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
    <add assembly="System.Data.Entity.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
    </assemblies> 
</compilation> 
</system.web> 
</configuration> 
4

我有这个问题也想通了,我创造了一些实体文件(EDMX等),但已经删除它们。

这个问题在我创建这些文件后才开始发生。在检查应用程序文件夹时,我发现Visual Studio实际上并未从驱动器中“删除”它们,它只是从项目中“删除”它们。因此,在编译项目时,它看到了这个edmx文件,并决定将其包含在内。因此错误。

简单修复 - 永久删除驱动器中的实体文件!

+0

这最终成为我的问题,一些意外被拖放到错误的文件夹中。 – Falkayn 2010-08-05 07:54:15

+0

只是在我的想法。旧的替换edmx被编译器选中了一些@#$ @#$ reason。 – 2010-08-07 23:14:45

+0

我想如果我刚刚删除了.edmx文件,我会回到几个步骤。这对我的项目非常重要。 – ProfK 2012-02-14 16:29:56

3

或者,您可以删除构建提供程序。

<system.web> 
    <compilation debug="true" targetFramework="4.0"> 
    <buildProviders> 
     <remove extension=".edmx"/> 
    </buildProviders> 
    </compilation> 
</system.web> 
+0

因错误失败:“在应用程序级别之外使用注册为allowDefinition ='MachineToApplication'的节是错误的。” – 2014-06-09 20:50:38

+0

@ PhilippMunin该错误意味着您正在编辑的配置文件不在IIS应用程序的根文件夹中,通常意味着您正在编辑错误的文件(子文件夹有时也会获取配置文件),或者您没有配置iis作为应用程序为您的项目提供服务。有关应用程序的更多信息:http://technet.microsoft.com/en-us/library/cc771654(v=ws.10).aspx – 2014-10-30 12:04:20

0

没有足够的声望添加评论。希望提到你需要将'System.Data.Entity.Design'程序集引用添加到根Web.config。我无意中尝试将它添加到我的Views目录中的Web.config中。注意这个陷阱。

+1

这是一条评论或答复?如果你的建议解决了OP所面临的问题,请编辑这个问题,这是一个正常的答案,而不是试图绕过需要50个评论的规则。如果它只是作为答案的评论,请删除它。此答案目前处于审核队列中,并可能因违反网站规则而被删除。 – BSMP 2017-05-03 18:47:22

+0

这是绕过规则需要50代表评论。如果有人可以将这个“答案”添加到所选答案中作为评论,那将是非常有用的。谢谢。 – 2017-05-03 19:19:40