2016-04-20 12 views
6

は明示的web.configで.NET 4.0をターゲットされています.NET 4.0 DataAnnotations GAC/EntityFramework競合

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

、の数のコンパイルエラーが表示され、以下のようなもの:

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組み立ててはならない、または非常に少なくとも、それはTableAttributeのようなクラスを含むべきではありません、 KeyAttributeは私が持っている唯一のリードはしかし

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

を言うエラーページの一番下の行、であるなど、私はそれがだ場合、当然のことながら(ウェブサイトのために特別にASP.NETのバージョンを変更する方法がわかりません問題のソース)。

+0

は、あなたがしようとした:1)右VS内の溶液をクリックし、その後、 'クリーンSolution'を選択します2)ソリューションを右クリックし、 'Rebuild Solution'を選択します。ここでの保証はありませんが、エラーの中で言及されているDLLの1つが 'Temporary ASP.NET Files'フォルダに入っているので役に立つかもしれません。 – user1429080

+0

@ user1429080ええ、それが私が試した最初のことでした。 –

+0

Visual StudioプロジェクトのどこにでもSystem.ComponentModel.DataAnnotationsアセンブリへの参照がないことを確認してください。 – Evk

答えて

0

コンパイルバッチをfalseに設定しようとしましたか?あなたはproject.Pleaseチェックを確認することができます

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

[description](https://msdn.microsoft.com/en-us/library/s10awwz0%28v=vs.85%29.aspx)のとおりに何もしないように見えました。今それを試してみました - 悲しいことに、目に見える効果はありません。 –

+0

*は私の問題で何もしないようでした –

+0

あなたはmanagePipeLineMode = Integratedで新しいアプリケーションプールを作成することもできます。 – Fafsi

0

ねえは、プロジェクトのすべてのNuGetパッケージが更新である場合、あるいはまた、エンティティフレームワーククラスモデル

0

チェックすることができ、同じproperties.Modelを持つ2つのモデルがあってはなりませんあなたが欲しくないものがインストールされています。

0

あなたのApp_Codeフォルダにコードがあると思われます(Entity Frameworkクラスの可能性はありますか?)。

ここでコードを移動して、すべてのプリコンパイルを実行して、ソースファイルではなくWebサイトアセンブリを展開することができます。

実際には、プロジェクトを見て、何もSystem.ComponentModel.DataAnnotationsを参照していないことを確認する必要があります。

また、ルートにプロジェクト内のweb.configファイルを確認するか、App_Codeフォルダー(S)中とのsystem.web /コンパイル/アセンブリの下では

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

がないことを確認してください。ない場合、あなたも

<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の以前のバージョンを実行していることを確認するためにチェックすることができます(4.5+フレームワークのバージョンがするように)スキーマの属性を持たないDataAnnotationsアセンブリのバージョンは:

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

デービッド、期限内にあなたの答えを無視して申し訳ありません。しかし、それは私の問題とは無関係です。おそらく、疑問から完全にはっきりしていないかもしれませんが、問題は、.NET 4.0の「System.ComponentModel.DataAnnotations」にはDBスキーマの注釈属性はまったく含まれていないはずですが、何らかの理由で依然として紛争が起こる。そして、はい、私のウェブサイトのプリコンパイルされたバージョンでそのような問題はありません、問題は私がプリコンパイルされたものを使用することができないということです。 –

+0

こんにちは。私は構文の強調表示のために私の答えを更新しましたが、httpRuntime設定でtargetFrameworkを指定しようとしましたか?つまり、

+0

はい、私はそうしようとしましたが、悲しいことに無駄です。 –