.NET 4.0 DataAnnotations GAC / EntityFramework冲突

时间:2016-04-20 11:02:31

标签: asp.net .net .net-4.0 entity-framework-6 gac

我正在尝试使用Entity Framework 6为Microsoft .NET 4.0构建一个ASP.NET网站。该网站明确针对web.config中的.NET 4.0:

<compilation debug="true" targetFramework="4.0">

applicationhost.config中的IIS Express'应用程序池也以.NET 4.0为目标:

<add name="Clr4ClassicAppPool" managedRuntimeVersion="v4.0" managedPipelineMode="Classic" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />

启动网站时,会显示一些CS0433编译器错误,如下所示:

error CS0433: The type "System.ComponentModel.DataAnnotations.Schema.TableAttribute" exists in both "c:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.ComponentModel.DataAnnotations\v4.0_4.0.0.0__31bf3856ad364e35\System.ComponentModel.DataAnnotations.dll" and "c:\Users\%username%\AppData\Local\Temp\Temporary ASP.NET Files\vs\e798ee36\2b3f5a24\assembly\dl3\fd34a92a\0052703a_0990d101\EntityFramework.DLL"

据我记得,.NET 4.0中不应该有System.ComponentModel.DataAnnotations程序集,或者至少它不应该包含TableAttributeKeyAttribute等类。只有我所拥有的是错误页面的底线,即

Microsoft .NET Framework, version:4.0.30319; ASP.NET, version:4.6.1055.0

但是,我不知道如何为网站专门更改ASP.NET版本(当然,如果这是问题的来源)。

4 个答案:

答案 0 :(得分:0)

您是否尝试将编译批处理设置为false?

<compilation debug="false" batch="false">

答案 1 :(得分:0)

嘿,你能检查一下你的项目。请检查一下,不应该有两个具有相同属性的模型。模型也可以是实体框架类模型

答案 2 :(得分:0)

检查项目的所有NuGet包是否都已更新,或者是否有任何您不想安装的包。

答案 3 :(得分:0)

我假设您的App_Code文件夹中有代码(至少可能是您的Entity Framework类?)。

现在您可以将代码移出,并预编译所有内容,以便部署网站程序集而不是任何源文件。

否则,您确实需要查看您的项目并确保没有任何内容引用System.ComponentModel.DataAnnotations。

此外,检查项目中根目录或App_Code文件夹中的任何web.config并确保没有

<add assembly="System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />

在system.web / compilation / assemblies下。如果没有,你甚至可以尝试进入

<remove assembly="System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />

e.g:

<compilation>
    <assemblies>
        <remove assembly="System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
    </assemblies>
</compilation>

您还可以检查以确保它运行早期版本的ASP.NET,以便它获取没有Schema属性的DataAnnotations程序集版本(作为4.5+框架)版本):

<configuration>
  <system.web>
    <httpRuntime targetFramework="4.0" />
  </system.web>
</configuration>