2010-03-23 20 views
6

Làm cách nào để chúng tôi sửa lỗi này? Câu hỏi này đã được giải quyết nhiều lần trên internet, nhưng nó luôn luôn là một cách giải quyết. Luôn sao chép tệp MySql.data.dll vào thư mục bin của bạn hoặc chỉ rõ bạn muốn phiên bản nào. Cách tiếp cận "thích hợp" để sử dụng DbProvderFactory cho MySQL với ASP.NET là gì?"Không tìm thấy hoặc tải Nhà cung cấp Dữ liệu Khung .NET đã đăng ký" với MySQL + ASP.NET

Tôi muốn có thể phát triển cục bộ và không phải lo lắng phiên bản nào họ đã cài đặt trên máy chủ. Vì nó là viết tắt, nếu tôi sao chép phiên bản của riêng tôi, tôi phải chắc chắn rằng đó là phiên bản mà họ sử dụng. Có vẻ dễ bị gãy.

+1

Tôi sử dụng phương pháp 'sao chép vào thư mục bin'. Tôi đã thấy rằng các chương trình sẽ phá vỡ khi phiên bản khác (tức là 5.1.x so với 5.2.x). –

Trả lời

2

Nếu lắp ráp được đề cập không có trong GAC, thì nó phải tồn tại trong đường dẫn, tức là thư mục bin. Là trong GAC, hội đồng phải được ký kết. Tôi đoán các nhà xây dựng của MySql.data.dll đã không ký dll, do đó bạn có thể không thể đặt nó vào GAC trên máy chủ. Vì vậy, sao chép các dll là giải pháp của bạn.

0

đây làm thế nào tôi có kết nối MySQL để làm việc:

Trong Machine.config dưới DbProviderFactories thêm folliwng:

<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.7.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" /> 

* Lưu ý số phiên bản và PublicKeyToken sẽ khác nhau tùy thuộc vào phiên bản của trình kết nối MySQL mà bạn đã cài đặt. Ví dụ này là dành cho v6.7.4.0 và v2.0 dot net

copy Tiếp% Program Files% \ MySQL \ MySQL Connector Net 6.7.4 \ Assemblies \ v2.0 \ MySql.Data.dll để % Windows \ assembly.

Hy vọng điều này sẽ giúp người :)

0

Một cách khác thông qua mã mà không app.config: (đừng quên để thiết lập các phiên bản MySql.Data ngay trong mã này)

public class MySqlDbConfiguration: DbConfiguration 
{ 
    public MySqlDbConfiguration() 
    { 
     SetDefaultConnectionFactory(new MySqlConnectionFactory()); 
     SetProviderServices(MySqlProviderInvariantName.ProviderName, new MySqlProviderServices()); 
     RegisterFactoryIfRequired(); 
    } 

    private static void RegisterFactoryIfRequired() 
    { 
     string dataProvider = @"MySql.Data.MySqlClient"; 
     string dataProviderDescription = @".Net Framework Data Provider for MySQL"; 
     string dataProviderName = @"MySQL Data Provider"; 
     string dataProviderType = 
      @"MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.8.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"; 

     bool addProvider = true; 
     var dataSet = ConfigurationManager.GetSection("system.data") as DataSet; 
     foreach (DataRow row in dataSet.Tables[0].Rows) 
     { 
      if ((row["InvariantName"] as string) == dataProvider) 
      { 
       // it is already in the config, no need to add. 
       addProvider = false; 
       break; 
      } 
     } 

     if (addProvider) 
      dataSet.Tables[0].Rows.Add(dataProviderName, dataProviderDescription, dataProvider, dataProviderType); 

     // test it 
     var factory = DbProviderFactories.GetFactory("MySql.Data.MySqlClient"); 
    } 

} 
1

Một lý do khác cho lỗi này đã được ghi nhận bởi người dùng trên một chủ đề tương tự here Tôi đã sao chép dán câu trả lời của người dùng vào bên dưới trong trường hợp liên kết thay đổi

Tôi chỉ thấy rằng lý do ngoại lệ này trong trường hợp của tôi là các phiên bản khác nhau giữa dll và th mục nhập cấu hình e. Vì vậy, đôi khi dll bạn thực sự có (hoặc được cài đặt bởi nuget hoặc cách khác) khác với mục nhập trong nút của app.config. Phần này, nếu không có trong app.config, cũng có thể được tìm thấy dưới Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config \ machine.config và các thư mục lân cận. Thay đổi phiên bản trong mục nhập vào phiên bản của dll đã giải quyết được vấn đề.