2009-05-28 20 views
6

Tôi có hai ứng dụng web asp.net khác nhau đều tham chiếu cùng một dll, ví dụ: SharedLibrary.dll.chia sẻ cùng một dll thông qua các ứng dụng web khác nhau mà không cần sao chép

Tôi muốn biết nếu có cách thêm một số cài đặt web.config vào một trong các tệp cấu hình của ứng dụng để tránh cần phải có hai bản sao của dll nằm xung quanh.

[đơn giản] cấu trúc thư mục của tôi là như sau:

\root 
    \Admin 
      \web.config 
      \Addins 
        \AdminWebAppPage.aspx 
        \bin 
         \AdminWebApp.dll 
         \SharedLibrary.dll <- this is the duplicated dll (I'd like to remove it from here ideally) 
    \Websites 
       \MyWebsite 
         \webroot 
           \web.config 
           \MainWebPage.aspx 
           \bin 
            \MainWebsite.dll 
            \SharedLibrary.dll 

Trả lời

5

Nếu bạn đăng ký lắp ráp trong Global Assembly Cache (GAC), tất cả các ứng dụng của bạn có thể truy cập nó mà không cần sao chép. Tuy nhiên, từ quan điểm về phiên bản và triển khai, tôi muốn nói việc giữ một bản sao trên mỗi trang là thích hợp hơn.

Làm rõ: giữ một bản sao trên mỗi trang web là thích hợp hơn khi các trang web không liên quan. Rõ ràng nếu một thư viện được chia sẻ thay đổi, bạn muốn cả trang web chính lẫn trang quản trị để nhận được bản sao cập nhật. :-)

+1

+1 Không nên sử dụng GAC trên các máy triển khai (như đã nêu). Tuy nhiên đây là giải pháp tốt nhất cho vấn đề. Chỉ cần chắc chắn rằng bạn biết hội đồng nào trong GAC và đó không phải là => sử dụng các dự án triển khai – Ropstah

0

Tôi đã làm điều này trong quá khứ, nơi rễ ảo dưới một trang web chia sẻ một DLL. Đó là, tôi đã có một trang web với một số DLL và một gốc ảo hành chính bên dưới nó. Kể từ khi nó là một đứa trẻ của trang web chính nó thừa kế của trang web của DLL. Nhưng tôi không chắc chắn về các trang web riêng biệt ...

+0

Điều này có hoạt động trong trường hợp của tôi mà trang web chính không nằm trong thư mục con cháu trực tiếp của trang quản trị không? –

+0

Đó là câu trả lời cuối cùng - không chắc chắn. Nhưng có lẽ bạn có thể thêm assmeblies trong web.config. GAC cũng là một lựa chọn? – n8wrl

0

Bạn có thể đặt mà DLL trong thư mục mà tất cả các ứng dụng web bạn muốn DLL này được chia sẻ trong số có quyền đọc.

Trong trường hợp Application_OnStart bạn có thể tự động tải lắp ráp sử dụng mã này ..

Assembly SampleAssembly; 
SampleAssembly = Assembly.LoadFrom("c:\\Sample.Assembly.dll"); 

Và bạn cũng có thể thử giải quyết các tài liệu tham khảo bằng cách sử dụng sự kiện Assembly_Resolve.

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