2016-04-20 19 views
6

Ich versuche, eine ASP.NET-Website für Microsoft .NET 4.0 unter Verwendung von Entity Framework 6. Die Website zu bauen ist explizit .NET 4.0 in web.config Targeting:.NET 4.0 DataAnnotations GAC/EntityFramework Konflikt

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

, Anwendungspool IIS Express in applicationhost.config zielt auch auf .NET 4.0:

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

Wenn die Website gestartet wird, eine Reihe von CS0433 Compiler-Fehler ist, diejenigen wie unten dargestellt:

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"

Soweit ich mich erinnere, sollte es in .NET 4.0, oder zumindest nicht System.ComponentModel.DataAnnotations Montage sollte es keine Klassen enthalten wie TableAttribute, KeyAttribute usw. die einzige Spur I ist in der unteren Zeile der Fehlerseite haben, die aber

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

sagt, ich weiß nicht, wie für eine Website speziell ASP.NET-Version ändern (natürlich, wenn das das ist Problemquelle).

+0

haben Sie versucht: 1) rechts die Lösung in VS klicken, und wählen Sie dann 'Saubere Solution', 2) Rechtsklick auf die Lösung und Wählen Sie dann "Lösung neu erstellen".Keine Garantien hier, aber es könnte helfen, da eine der DLL: s in dem Fehler im Ordner "Temporary ASP.NET Files" erwähnt wird. – user1429080

+0

@ user1429080 Ja, das war das erste, was ich ausprobiert habe. –

+0

Sie sind also sicher, dass nirgendwo in Ihrem Visual Studio-Projekt Verweise auf die Assembly System.ComponentModel.DataAnnotations vorhanden sind? – Evk

Antwort

0

Haben Sie versucht, den Kompilierungsstapel auf false zu setzen?

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

Ich habe es nicht versucht, da es schien nichts zu tun, wie [per Beschreibung] (https://msdn.microsoft.com/en-us/library/s10awwz0%28v=vs.85%29.aspx). Versuchte es jetzt - leider ohne sichtbaren Effekt. –

+0

* schien nichts mit meinem Problem zu tun –

+0

Sie können auch versuchen, neue App Pool mit managePipeLineMode = Integriert erstellen. – Fafsi

0

Hey Können Sie Ihre project.Please Check überprüfen sollten sie nicht zwei Modelle mit gleichem properties.Model sein kann auch Entity Framework Klassenmodell

0

überprüfen Sie, ob alle NuGet Pakete für Ihr Projekt aktualisiert oder wenn seine Es sind irgendwelche installiert, die Sie nicht wollen.

0

Ich nehme an, Sie haben Code in Ihrem App_Code-Ordner (wahrscheinlich Ihre Entity Framework-Klassen mindestens?).

Jetzt können Sie Ihren Code dorthin verschieben und alles vorkompilieren, sodass Sie die Website-Assembly und keine Quelldateien bereitstellen.

Andernfalls müssen Sie wirklich Ihre Projekte betrachten und sicherstellen, dass nichts auf System.ComponentModel.DataAnnotations verweist.

Überprüfen Sie auch alle web.config im Projekt an der Wurzel oder im Ordner App_Code (n) und stellen Sie sicher, dass es keine

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

unter system.web/Kompilierung/Baugruppen. Wenn nicht, könnten Sie sogar versuchen, setzen in

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

zB:

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

können Sie auch sicher, überprüfen Sie, dass sie die frühere Version von ASP.NET ausgeführt wird, so dass es nach oben nimmt der Version der DataAnnotations Assembly, die nicht das Schemaattribut hat (wie die 4.5+ Framework-Version der Fall ist):

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

David, Entschuldigung für das Ignorieren Ihrer Antwort zu gegebener Zeit. Es ist jedoch für mein Problem leider irrelevant. Vielleicht war es nicht ganz klar aus Frage, aber das Problem ist, dass es überhaupt keinen Konflikt geben sollte, da 'System.ComponentModel.DataAnnotations' in .NET 4.0 überhaupt keine DB Schema Annotationsattribute enthalten sollte, aber irgendwie die Konflikt entsteht noch. Und ja, es gibt kein Problem mit einer vorkompilierten Version meiner Website, das Problem ist, dass ich kein vorkompiliertes verwenden kann. –

+0

Hallo. Ich habe meine Antwort für die Syntaxhervorhebung aktualisiert, aber haben Sie versucht, targetFramework in der httpRuntime-Konfiguration anzugeben? d. h.

+0

Ja, ich habe es versucht, aber leider ohne Erfolg. –