2009-06-01 45 views
10

Tôi đang làm việc trên một hệ thống để sử dụng SqlServerCe với NHibernate. Từ chương trình điều khiển của tôi, nếu tôi thêm các System.Data.SqlServerCe lắp ráp như là một tài liệu tham khảo, tôi có thể tạo và chạy các truy vấn đối với một cơ sở dữ liệu tốt. Khi cố gắng sử dụng NHibernate, tuy nhiên, tôi nhận được ngoại lệ sau:Không thể tải tập tin hoặc lắp ráp

Ngoại lệ đầu tiên của loại 'System.IO.FileNotFoundException' xảy ra trong mscorlib.dll Thông tin bổ sung: Không thể tải tệp hoặc lắp ráp 'Hệ thống. Data.SqlServerCe 'hoặc một trong các phụ thuộc của nó. Hệ thống không thể tìm thấy các tập tin được chỉ định.

Tôi đã theo dõi ngoại lệ cho một cuộc gọi đến Assembly.Load ("System.Data.SqlServerCe"), có vẻ như nó sẽ hoạt động. Các System.Data.SqlServerCe lắp ráp là trong GAC (Tôi cũng đã cố gắng để thêm nó như là một tham chiếu địa phương với CopyLocal = true, vô ích), và tôi có thể sử dụng thành viên của nó tốt, vậy tại sao tôi không thể tải một cách rõ ràng nó? Khi tôi mở assembly trong Reflector, nó gặp sự cố khi tải tham chiếu System.Transactions (tôi cũng đã thử thêm nó như là một tham chiếu cục bộ, một lần nữa vô ích), vì vậy việc nạp assembly đó có thể là vấn đề, thay vì System. Data.SqlServerCe lắp ráp.

Đây có phải là sự cố thường gặp không? Có thể cấu hình sai hệ thống?

+0

Có vẻ như bạn chưa bao giờ nghe nói về Fusion: http://www.hanselman.com/blog/BackToBasicsUsingFusionLogViewerToDebugObscureLoaderErrors.aspx – zvolkov

+0

Ooh, công cụ gọn gàng. Các phản hồi nó mang lại cho tôi là: LOG: Các ràng buộc tương tự đã được nhìn thấy trước, và đã thất bại với hr = 0x80070002. ERR: Lỗi không thể khôi phục xảy ra trong khi kiểm tra trước khi tải xuống (hr = 0x80070002). Điều này dường như không hữu ích - nó đã thất bại trước đây, vậy hãy thất bại lần nữa? Tôi cần phải đọc trên các tài liệu nhiệt hạch để hy vọng tìm ra điều này tốt hơn một chút. Tôi đã được chỉ ra một giải pháp cho vấn đề của mình, tuy nhiên - chi tiết bên dưới. – Dathan

Trả lời

8

Rõ ràng điều này có thể được giải quyết bằng cách thêm phần tử < đủ điều kiệnAssembly > vào tệp app.config. Thêm các ứng dụng sau có ứng dụng của tôi chạy trơn tru:

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <qualifyAssembly partialName="System.Data.SqlServerCe" fullName="System.Data.SqlServerCe, Version=3.5.1.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" /> 
    </assemblyBinding> 
</runtime> 

Cảm ơn!

+0

yeah tên đầy đủ được đề cập ở trên thực sự là tên đầy đủ của hội đồng. Nó cung cấp cho CLR thông tin cần tìm và tải assembly cụ thể. Bạn cũng có thể thay thế fullName đó trong chuỗi kết nối trong tệp .config (thay cho partialName) – nocache

1

Tôi gặp sự cố tương tự. Sai lầm mà tôi đang làm là tôi đang cố gắng thực hiện hiện tại .exe trong ../obj/x86/Release, trong khi tôi phải thực thi hiện tại .exe trong ../bin/Release. (Tôi là người mới tuyệt đối với C#).

(Tôi cũng nhận thấy rằng trong thư mục ../bin/Release này, file .dll tham chiếu được sao chép địa phương.)

2

này có lẽ hầu hết các kết nối với một số hệ thống (mis) cấu hình.

Tuy nhiên, theo thiết kế, SQL Server CE chỉ là một DLL duy nhất, có thể được vận chuyển cùng với sản phẩm của bạn.
Điều này có nghĩa là bạn chỉ có thể đặt Copy local thành True trong thuộc tính tham chiếu của System.Data.SqlServerCe và bạn đã hoàn tất.

+0

Nó hoạt động hoàn hảo cho tôi! Cảm ơn. –

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