2013-04-17 31 views
8

Tôi có một dự án khung thực thể đang hoạt động tốt trên máy tính của tôi, nhưng sẽ bị ngắt khi chạy từ mạng. Thay đổi gần đây đối với dự án bao gồm việc thêm dll động LINQ (System.Linq.Dynamic)Ngoại lệ khởi tạo loại khung thực thể

Khi tôi gỡ lỗi nó từ mạng, VS báo cáo: The type initializer for 'System.Data.Entity.Internal.AppConfig' threw an exception

Trường hợp ngoại lệ bên trong là: "Không thể tải tập tin hoặc lắp ráp 'EntityFramework, Version = 4.4.0.0, Văn hóa = trung lập, PublicKeyToken = b77a5c561934e089' hoặc một trong các phụ thuộc của nó. Định nghĩa tệp kê khai của assembly không khớp với tham chiếu assembly (Ngoại lệ từ HRESULT: 0x80131040) ":" EntityFramework, Version = 4.4 .0.0, Văn hóa = trung lập, PublicKeyToken = b77a5c561934e089 "}

Tôi đã thử các thủ thuật thông thường: xóa thư mục packages khỏi roo t của dự án, gỡ cài đặt và cài đặt lại từ bảng điều khiển của trình quản lý gói nhưng không có kết quả.

app.config của tôi:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
     <section name="LGFinance.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    </sectionGroup> 
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> 
    </configSections> 
    <connectionStrings> 
    <add name="LGFinanceEntities" connectionString="metadata=res://*/Model.LGFinanceContext.csdl|res://*/Model.LGFinanceContext.ssdl|res://*/Model.LGFinanceContext.msl;provider=System.Data.SqlClient; provider connection string='data source=lightning;initial catalog=DLGDB;Integrated Security=true;Password=******;multipleactiveresultsets=True;App=EntityFramework'" providerName="System.Data.EntityClient" /> 
    </connectionStrings> 
    <entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> 
    </entityFramework> 
    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
    </startup> 
    <applicationSettings> 
    <LGFinance.Properties.Settings> 
     <setting name="Setting" serializeAs="String"> 
     <value /> 
     </setting> 
    </LGFinance.Properties.Settings> 
    </applicationSettings> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Windows.Interactivity" publicKeyToken="31bf3856ad364e35" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
</configuration> 

Ai đó có thể chỉ ra những gì tôi đã làm sai?

+0

Khi bạn nói "nhưng đổ xuống khi chạy từ mạng", bạn có nghĩa là mã đang chạy trên máy khác. Nhiều khả năng bất cứ nơi nào bạn đang chạy mã không có khuôn khổ thực thể 5.0 dll.Kiểm tra thùng trên máy "từ xa" và xem nó có ở đó không. – cgotberg

+0

Đúng, đến một máy khác. Nhưng tôi có tất cả các dll (và một vài xmls liên quan) nằm trong thư mục đó. Tất cả đã được làm việc cho đến ngày hôm nay, và chỉ có những thứ mới thực sự mà tôi có thể đổ lỗi cho nó là năng động linq – mcalex

Trả lời

20

Tệp App.config của bạn có Entity Framework 5.0 được liệt kê và một số dự án trong mã của bạn vẫn giữ trên EF 4.4 và mong muốn tìm thấy nó trong tệp App.config.

Đây là những gì có thể xảy ra nhất: Bạn đã cài đặt EF 5.0 trên dự án được xây dựng trong .NET 4.0, phiên bản EF 4.4 thay vì 5.0 (vì 5.0 chỉ dành cho .NET 4.5). Nếu bạn đã cố gắng nâng cấp dự án lên .NET 4.5 sau đó, bạn vẫn sẽ có EF 4.4 trên dự án đó. Điều đó sẽ yêu cầu bạn phải cài đặt lại EF trên dự án đó để có tham chiếu chính xác đến EF 5.0.

Đưa ra một ảnh và cho tôi biết nếu nó hoạt động.

+0

Không chính xác chắc chắn những gì tôi đang cho một shot, nhưng, tôi đã cố gắng để gỡ bỏ cài đặt và cài đặt lại EF bằng cách sử dụng Nuget. Việc gỡ cài đặt dường như hoạt động, nhưng khi cài đặt lại Nuget cho biết dự án đã có tham chiếu đến EF 5, nhưng sẽ không cho phép tôi gỡ cài đặt agin. Một câu trả lời SO nói để thử với dòng lệnh nuget để cài đặt, vì vậy tôi đã làm điều đó, và nó đã đưa ra một thông điệp cài đặt thành công, nhưng sau đó tiếp theo với cùng: Project đã có một thông báo kiểu tham chiếu EF. – mcalex

+0

Bạn sẽ cần xóa thủ công Khung thực thể khỏi Tham chiếu trong dự án, sau đó cài đặt lại EF. – IronMan84

+0

Vâng, đó là - hoặc một cái gì đó như nó - Tôi vẫn không chắc chắn. Cuối cùng đã nhận được tất cả kéo ra và đưa trở lại một lần nữa đúng cách (tôi nghĩ). Bây giờ các chàng trai hệ thống phải triển khai dot net 4.5. Rất tiếc. :-) – mcalex

10

Tất cả các dự án phải có phiên bản đúng của EF được cài đặt đầu tiên và sau đó kiểm tra như sau trong file App.config,

  1. Hãy chắc chắn rằng connectionStrings phần tử là sau khi configSections phần tử.
  2. Đảm bảo yếu tố khởi động là sau yếu tố kết nối connectionStrings.

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
     <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.3.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
    </configSections> 
    <connectionStrings> 
     <add name="SchedulingContext" connectionString="Data Source=XXX\SQL2008R2DEV;Initial Catalog=YYY;Persist Security Info=True;User ID=sa;Password=XXX" providerName="System.Data.SqlClient"/> 
    </connectionStrings> 
    <startup> 
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
    </startup>  
</configuration> 
4

tôi đã cố gắng tất cả, sau đó chỉ cần loại bỏ các followin g nhà cung cấp, nó đã hoạt động cho tôi

<providers> 
    <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
</providers> 
+1

Tôi bắt đầu dự án của mình với EF6 nhưng cần quay lại EF5. Phần "các nhà cung cấp" không có sẵn trong EF5 để loại bỏ vấn đề này. Cảm ơn bạn. – MarceloBarbosa

Các vấn đề liên quan