在ASP.NET MVC 2中使用Entity Framework时,如何将MvcBuildViews设置为true?

34
在VS 2010中,如果你正在使用Entity Framework,将MVC2项目的.csproj文件中的 <MvcBuildViews>true</MvcBuildViews> 改为该值会导致错误。具体地,在调试时构建视图,同时保证项目能够编译是我的需求。
6个回答

60

您可以通过在web.config文件中添加以下元素来解决此MVC编译问题:

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

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


5
显而易见的、逻辑性强的解决方案。谢谢。但为什么它会表现得像那样?为什么我需要将 System.Data.Entity.Design 命名空间添加到我的程序集中,这与我的代码无关。这是 Visual Studio 的工作,不应该被添加到我的应用程序中。 - Alper
1
有人知道为什么会发生这种情况吗? - BrianFinkel
8
放在 <system.web><compilation><assemblies> 中 - 为了避免其他人费力去弄明白。参考 https://dev59.com/D2ox5IYBdhLWcg3wDgXR#10078384 - Tim Abell

5
我也遇到过这个问题,后来发现我创建了一些实体文件(如edmx文件),但又将它们删除了。只有在我创建这些文件后,这个问题才开始出现。检查应用程序文件夹后,我发现Visual Studio并没有真正从驱动器上“删除”它们,而是只是从项目中“删除”它们。因此,当编译项目时,它看到了这个edmx文件,并决定将其包含进去,导致出现错误。解决方法很简单-永久性地将实体文件从驱动器上删除!

1
这最终成为了我的问题,有些东西被意外地拖放到了错误的文件夹中。 - Falkayn
刚刚在我的电脑上解决了这个问题。由于某种奇怪的原因,旧的被替换的 edmx 文件被编译器选中了。 - Brady Moritz
如果我只删除了我的.edmx文件,我认为我会倒退几步。它对我的项目非常重要。 - ProfK
我使用LINQ to SQL,而不是LINQ to Entities。当我尝试创建一个LINQ to Entities文件时,EDMX文件被创建了出来。 - benpage

3

或者你可以移除构建提供程序。

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

失败并显示错误信息:"在应用程序级别之外使用已注册为 allowDefinition='MachineToApplication' 的部分是错误的。" - Philipp Munin
@PhilippMunin,这个错误意味着你正在编辑的配置文件不在IIS应用程序的根目录中,通常这意味着你正在编辑错误的文件(子文件夹有时也会有配置文件),或者你还没有配置iis将你的项目作为应用程序提供服务。关于应用程序的更多信息:http://technet.microsoft.com/en-us/library/cc771654(v=ws.10).aspx - Tim Abell
只是想提醒一下,有时这也是由于您的/obj目录中的Web配置文件引起的。只需删除/obj目录,问题就应该解决了。 - Denny Ferrassoli

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>

0

当我设置MvcBuildViews="true"时,我遇到了类似的错误,这与构建临时文件找到多个web.config有关,而且根本不喜欢它。

这是完全不同的错误,但我有一个隐秘的怀疑,它们可能有关联...

您可以在此处找到我最初提出的问题,然后在此处概述解决方案。

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

例如:

<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>

祝一切顺利,
查尔斯


0

声望不足,无法添加评论。想提醒一下,您需要将'System.Data.Entity.Design'程序集引用添加到根Web.config中。我不小心尝试将其添加到我的Views目录中的Web.config中。要注意这个陷阱。


1
这是一条评论还是答案?如果您的建议解决了OP面临的问题,请[编辑]它,使其表述为正常答案,而不是试图规避需要50声望才能评论的规则。如果它只是伪装成答案的评论,请将其删除。此答案当前处于审核队列中,可能会因违反网站规则而被删除。 - BSMP
这是规避需要50声望才能发表评论的规则。如果有人能将此“答案”作为评论添加到所选答案中,那将非常有用。谢谢。 - Kyle s

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接