2009-07-30 27 views
9

Tôi đã làm việc với dịch vụ Web XML được viết bằng ASP.Net. Bây giờ tôi cần tham khảo một số hội đồng nhất định nằm trong một thư mục cụ thể, ví dụ: c:\NotMyCode
I không muốn sao chép/sao chép hàng loạt dll trong thư mục đó vào thư mục bin của tôi.Làm cách nào để tham chiếu các hội đồng bên ngoài thư mục bin trong ứng dụng ASP.net?

Tôi đã cố gắng giữ số CopyLocal=false cho các hội đồng được giới thiệu trong Dịch vụ web. Điều đó đã kết thúc trong một ngoại lệ FileNotFound cho hội đồng. Khi tôi chuyển sang CopyLocal=true, các DLL được tham chiếu sẽ được sao chép sang thư mục bin .. và nó hoạt động.

Vì vậy, câu hỏi của tôi ở đây là: Làm cách nào để tham chiếu các hội đồng không nằm trong thư mục bin của tôi hoặc thư mục con bên dưới thư mục đó? Tôi có cần thay đổi một số tệp chính sách bảo mật ở đâu đó không? Tôi nghĩ rằng tôi không phải là người đầu tiên muốn làm điều gì đó như thế này .. vì vậy tôi giả sử một người nào đó đã giải quyết được vấn đề này.

(Tôi đã thử mạo danh một người dùng admin trong bảng điều khiển cấu hình IIS ASP.net, nhưng điều đó didnt làm việc một trong hai.)

Cập nhật: Không thể cài đặt nó trong GAC hoặc. Để cung cấp sự tương tự, dịch vụ web này đang cung cấp chế độ xem đơn giản cho ứng dụng của bên thứ ba, ví dụ: Starteam. Tôi không thể (không cần phải .. không muốn ..) sao chép tất cả các tệp nhị phân trong thư mục đó vào thư mục bin hoặc cài đặt nó vào GAC

+0

Tôi gặp vấn đề tương tự và không thể tìm thấy giải pháp! Bạn đã xoay xở để giải quyết vấn đề này chưa? Tôi đang sử dụng .NET 3.5. Nó có vẻ giống như một lỗi tương tự với http://support.microsoft.com/kb/812832. – dtroy

Trả lời

0

Bạn luôn có thể đặt các hội đồng tham chiếu của mình vào GAC, sau đó vị trí sẽ không quan trọng. Bạn có thể cài đặt thành phần bằng cách kéo nó vào trong GAC (C: \ windows \ assembly) hoặc chạy GACUtil.exe.

Bài viết này có thể hữu ích. Nó mô tả "Best Practices for Assembly Loading". Lúc đầu, tôi nghĩ bạn có thể sử dụng phần tử <probing privatePath="bin\debug"/> trong thời gian chạy/assemblyBinding trong web.config, nhưng việc thăm dò sẽ chỉ cho phép bạn chỉ định các thư mục con dưới vị trí gốc.

-1

Bạn có thể đặt GAC và truy cập từ đó.

+0

vui lòng đọc phần cuối câu hỏi của tôi .. – Gishu

+0

Câu trả lời hay? hoặc xóa nó tốt hơn? – Kiquenet

0

Tôi nghĩ bạn cũng có thể tham chiếu đường dẫn lắp ráp cụ thể trong mã.

AppDomain.CurrentDomain.AppendPrivatePath("C:\\NotMyCode"); 

Thực hiện điều đó trong ứng dụng Global.asax Application_Start của bạn.

+0

AppendPrivatePath đã lỗi thời, theo MSDN: http://msdn.microsoft.com/en-us/library/system.appdomain.appendprivatepath.aspx –

+0

Điều đó phải có trong 3.5 .. Vẫn còn rất nhiều 2.0 không may. PrivateBinPath sau đó .... Cùng một ... – davewasthere

14

Theo MSDN documentation,

hội Được tham chiếu bên ngoài thư mục gốc của ứng dụng phải có tên mạnh mẽ và phải thể được cài đặt trong Global Assembly Cache hoặc quy định sử dụng các yếu tố <codeBase>.

Vì vậy, có vẻ như bạn đã hết may mắn. Dưới đây là những gì tôi muốn thử:

  1. Tạo một NTFS junction point dưới thư mục cơ sở ứng dụng trỏ đến thư mục chứa mã được chia sẻ của bạn. Đây là bước quan trọng. Ví dụ: trong thư mục cơ sở ứng dụng của bạn, hãy chạy linkd SharedCode c:\NotMyCode. Điều này làm cho <yourappbase>\SharedCode có hiệu quả là bí danh cho c:\NotMyCode.
  2. Cho ASP biết.NET để thăm dò cho hội đồng trong đường dẫn này, sử dụng một yếu tố <probing>, tham khảo các điểm giao nhau SharedCode. Vì đây là dưới cơ sở ứng dụng của bạn, nó sẽ hoạt động. Ngoài ra, hãy sử dụng AppDomainSetup.PrivateBinPath để đặt đường dẫn được thăm dò cho hội đồng.

Tôi khá tò mò để xem nếu điều này làm việc :-)

+0

+1 cho lén lút .. không biết về linkd. Nó quản lý để đánh lừa Windows explorer nhưng không ASP.Net. ASP.net sao chép các tệp nhị phân vào một vị trí tạm thời từ nơi nó được thực thi. Điều kỳ lạ là vị trí tạm thời hiển thị các tệp này - tuy nhiên FusionLogVw không hiển thị mục nhập cho độ phân giải lắp ráp không thành công. Nhưng máy chủ đáp ứng với một FileNotFound như bình thường ... – Gishu

+0

Đó là một bummer :-( –

+1

chúng ta có thể vô hiệu hóa shadow đối phó với thư mục tạm thời .. nhưng tôi không thích giải pháp JUNCTION nó giống như hack ... \ –

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