2016-04-20 37 views
6

Sto cercando di costruire un sito Web ASP.NET per Microsoft .NET 4.0 utilizzando Entity Framework 6. Il sito web è esplicitamente rivolte NET 4.0 in web.config:.NET 4.0 DataAnnotations GAC/EntityFramework conflitto

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

, pool di applicazioni IIS Express' in applicationhost.config rivolge anche .NET 4.0:

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

Quando il sito è stato lanciato, un certo numero di CS0433 errori di compilazione è mostrato, quelli come di seguito:

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"

Per quanto mi ricordo, non ci dovrebbero essere System.ComponentModel.DataAnnotations assemblaggio in .NET 4.0, o per lo meno non dovrebbe contenere le classi come TableAttribute, KeyAttribute ecc l'unico indizio che ho è la linea di fondo della pagina di errore, che dice

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

però, non so come cambiare specificamente versione di ASP.NET per un sito web (ovviamente, se questo è il fonte del problema).

+0

hai provato a: 1) Fare clic destro la soluzione in VS, quindi selezionare 'pulito in soluzione, 2) Fare clic con il tasto destro sulla soluzione e quindi seleziona 'Ricrea soluzione '.Nessuna garanzia qui, ma potrebbe essere d'aiuto dato che una delle DLL indicate nell'errore si trova nella cartella 'File temporanei ASP.NET'. – user1429080

+0

@ user1429080 Sì, è stata la prima cosa che ho provato. –

+0

Quindi è sicuro che non ci siano riferimenti all'assembly System.ComponentModel.DataAnnotations in qualsiasi punto del progetto di Visual Studio? – Evk

risposta

0

Hai provato a impostare il batch di compilazione su falso?

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

Non ho provato come non sembrava fare nulla come per [descrizione] (https://msdn.microsoft.com/en-us/library/s10awwz0%28v=vs.85%29.aspx). Provato ora - purtroppo, per nessun effetto visibile. –

+0

* sembrava non fare nulla con il mio problema –

+0

puoi anche provare a creare un nuovo pool di app con managePipeLineMode = Integrated. – Fafsi

0

Hey Potete controllare il vostro check project.Please non ci dovrebbero essere due modelli con lo stesso properties.Model può anche essere Entity Framework classe del modello

0

Verificare che tutti i pacchetti Nuget per il vostro progetto vengono aggiornate o se ce ne sono installati che non vuoi.

0

Suppongo che tu abbia il codice nella tua cartella App_Code (probabilmente le tue classi di Entity Framework almeno?).

Ora è possibile spostare il codice da lì e precompilare tutto in modo da distribuire l'assembly del sito Web e non tutti i file di origine.

In caso contrario, è davvero necessario guardare i progetti e assicurarsi che nulla faccia riferimento a System.ComponentModel.DataAnnotations.

Inoltre, verificare eventuali web.config nel progetto alla radice, o nella cartella App_Code (s) e assicurarsi che non v'è alcun

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

sotto system.web/compilation/assiemi. Se non c'è, si potrebbe anche provare a mettere in

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

esempio:

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

È inoltre possibile controllare per assicurarsi che sia in esecuzione la versione precedente di ASP.NET in modo che raccoglie il versione dell'assembly DataAnnotations che non ha l'attributo dello schema (come la versione 4.5+ quadro fa):

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

David, scusa per aver ignorato la tua risposta a tempo debito. Tuttavia, è tristemente irrilevante per il mio problema. Forse non era completamente chiaro dalla domanda, ma il problema è che non dovrebbe esserci alcun conflitto, dato che 'System.ComponentModel.DataAnnotations' in .NET 4.0 non dovrebbe contenere alcun attributo di annotazione dello schema del DB, ma in qualche modo il conflitto sorge ancora. E sì, non c'è alcun problema con una versione precompilata del mio sito web, il problema è che non posso usare uno precompilato. –

+0

Ciao. Ho aggiornato la mia risposta per l'evidenziazione della sintassi, ma avete provato a specificare il targetFramework sulla configurazione di httpRuntime? Ad esempio

+0

Sì, ho provato a farlo, ma purtroppo inutilmente. –