2016-04-20 15 views
6

Tôi đang cố gắng để xây dựng một trang web ASP.NET cho Microsoft .NET 4.0 sử dụng Entity Framework 6. Các trang web được nhắm mục tiêu một cách rõ ràng NET 4.0 trong web.config:.NET 4.0 DataAnnotations GAC/EntityFramework xung đột

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

, IIS Express hồ bơi ứng dụng trong applicationhost.config cũng nhắm .NET 4.0:

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

Khi trang web được đưa ra, một số CS0433 lỗi biên dịch được hiển thị, những người như dưới đây:

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"

Theo như tôi nhớ, không nên có System.ComponentModel.DataAnnotations lắp ráp trong .NET 4.0, hoặc ít nhất nó không nên chứa các lớp học như TableAttribute, KeyAttribute vv dẫn duy nhất tôi có là điểm mấu chốt của trang báo lỗi, mà nói

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

tuy nhiên, tôi không biết làm thế nào để thay đổi đặc biệt ASP.NET phiên bản cho một trang web (tất nhiên, nếu đó là nguồn của vấn đề).

+0

Bạn đã cố gắng: 1) Nhấp chuột phải vào giải pháp trong VS, sau đó chọn 'Giải pháp làm sạch', 2) Nhấp chuột phải vào giải pháp và sau đó chọn 'Giải pháp xây dựng lại'.Không có bảo đảm ở đây, nhưng nó có thể giúp vì một trong những DLL: s được đề cập trong lỗi nằm trong thư mục 'Temporary ASP.NET Files'. – user1429080

+0

@ user1429080 Vâng, đó là điều đầu tiên tôi đã thử. –

+0

Vì vậy, bạn chắc chắn rằng không có tham chiếu đến System.ComponentModel.DataAnnotations lắp ráp bất cứ nơi nào trong dự án Visual Studio của bạn? – Evk

Trả lời

0

Bạn đã thử đặt hàng loạt biên dịch thành sai?

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

Đã không thử nó vì nó dường như không làm gì theo [mô tả] (https://msdn.microsoft.com/en-us/library/s10awwz0%28v=vs.85%29.aspx). Đã thử nó ngay bây giờ - thật đáng buồn, không có hiệu ứng rõ ràng. –

+0

* dường như không làm gì với vấn đề của tôi –

+0

bạn cũng có thể thử tạo Nhóm ứng dụng mới bằng managePipeLineMode = Tích hợp. – Fafsi

0

Hey bạn có thể kiểm tra kiểm tra project.Please của bạn không nên có hai mô hình với cùng properties.Model cũng có thể là khuôn khổ tổ chức lớp mô hình

0

Kiểm tra xem tất cả các gói NuGet cho dự án của bạn được cập nhật hoặc nếu có bất kỳ cài đặt nào mà bạn không muốn.

0

Tôi giả sử bạn đã có mã trong thư mục App_Code của mình (có thể các lớp Khung thực thể của bạn ít nhất?).

Bây giờ bạn có thể di chuyển mã của mình ra khỏi đó và biên dịch trước mọi thứ để bạn triển khai lắp ráp trang web chứ không phải bất kỳ tệp nguồn nào.

Nếu không, bạn thực sự cần xem xét các dự án của mình và đảm bảo rằng không có gì đang tham chiếu System.ComponentModel.DataAnnotations.

Ngoài ra, kiểm tra bất kỳ web.config trong dự án ở thư mục gốc, hoặc trong thư mục App_Code (s) và chắc chắn rằng không có

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

dưới system.web/biên dịch/lắp ráp. Nếu không có, bạn có thể thậm chí thử đặt trong

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

ví dụ:

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

Bạn cũng có thể kiểm tra để chắc chắn rằng nó đang chạy các phiên bản trước của ASP.NET để nó nhặt phiên bản của hội đồng DataAnnotations không có thuộc tính lược đồ (như phiên bản khung 4.5+):

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

David, xin lỗi vì bỏ qua câu trả lời của bạn trong thời gian tới. Nó, tuy nhiên, là đáng buồn không liên quan đến vấn đề của tôi. Có lẽ nó không hoàn toàn rõ ràng từ câu hỏi, nhưng vấn đề là không nên có bất kỳ xung đột nào cả, vì 'System.ComponentModel.DataAnnotations' trong .NET 4.0 không chứa thuộc tính chú thích lược đồ DB nào cả, nhưng bằng cách nào đó xung đột vẫn nảy sinh. Và có, không có vấn đề như vậy với một phiên bản biên dịch trước của trang web của tôi, vấn đề là tôi không thể sử dụng một biên dịch được biên dịch trước. –

+0

Xin chào. Tôi đã cập nhật câu trả lời của tôi để làm nổi bật cú pháp, nhưng bạn đã thử chỉ định targetFramework trên cấu hình httpRuntime chưa? tức là

+0

Vâng, tôi đã cố gắng làm như vậy, nhưng thật đáng buồn là không có kết quả. –