簡體   English   中英

.NET 4.0 DataAnnotations GAC/EntityFramework 沖突

[英].NET 4.0 DataAnnotations GAC/EntityFramework conflict

我正在嘗試使用 Entity Framework 6 為 Microsoft .NET 4.0 構建一個 ASP.NET 網站。該網站在web.config明確針對 .NET 4.0:

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

, IIS Express 在applicationhost.config的應用程序池也針對 .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 版本(當然,如果這是問題的來源)。

您是否嘗試將編譯批處理設置為 false?

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

我假設您的 App_Code 文件夾中有代碼(至少可能是您的實體框架類?)。

現在您可以將代碼移出那里,並預編譯所有內容,以便您部署網站程序集而不是任何源文件。

否則,您真的需要查看您的項目並確保沒有任何內容引用 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" />

例如:

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

嘿,你能檢查一下你的項目嗎。請檢查不應該有兩個具有相同屬性的模型。模型也可以是實體框架類模型

檢查項目的所有 NuGet 包是否都已更新,或者是否安裝了任何您不想要的包。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM