2009-08-28 13 views
6

Vì AppDomain.AppendPrivatePath() đã lỗi thời, tôi đang cố gắng tìm ra cách để chỉ định PrivateBinPath cho AppDomain hiện tại trong dự án của tôi mà không cần quay lên một AppDomain hoàn toàn mới và có thể truy cập nó sau này.Cách truy cập đúng thuộc tính PrivateBinPath của AppDomain hiện tại?

Tôi biết tôi có thể thiết lập các PrivateBinPath vào một đối tượng AppDomainSetup (đó sẽ là ok nếu tôi muốn tạo một AppDomain mới), và tôi cũng biết rằng tôi có thể thêm nó vào app.config tôi như vậy:

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <probing privatePath=".\AlternateLookupPath" /> 
    </assemblyBinding> 
    </runtime> 

Tuy nhiên, khi thêm mục nhập này vào ứng dụng của tôi.config, thuộc tính AppDomain.CurrentDomain.SetupInformation.PrivateBinPath là rỗng.

Trả lời

6

sử dụng

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <probing privatePath="AlternateLookupPath" /> 
    </assemblyBinding> 
    </runtime> 

Theo http://msdn.microsoft.com/en-us/library/823z9h8w.aspx các privatePath đã được hiểu là "thư mục con của các ứng dụng của thư mục cơ sở "... vì vậy tôi nghi ngờ rằng việc sử dụng .\ bằng cách nào đó đang làm rối tung mọi thứ ...

+2

Tôi đã thử sử dụng tính năng này, nhưng không làm việc cho tôi. Thuộc tính AppDomain.CurrentDomain.SetupInformation.PrivateBinPath vẫn còn null. –

+1

Dường như AppDomain.CurrentDomain.SetupInformation.PrivateBinPath vẫn còn null khi đường dẫn thăm dò được thiết lập thông qua tệp app.config, nhưng tôi đã có thể xác nhận rằng đường dẫn thăm dò vẫn thực sự được sử dụng trong trường hợp này. Gọi Assembly.Load và chỉ định tên của một hội đồng trong đường dẫn thăm dò của tôi đã thành công. –

+1

Như sugessted trong bình luận này http://stackoverflow.com/questions/33353420/appdomain-currentdomain-setupinformation-privatebinpath-is-null?noredirect=1#comment54508987_33353420 'SetupInformation.PrivateBinPath' luôn luôn là null cho appdomain chính. – bitbonk

3

Từ các tài liệu:

Nếu các thư mục quy định cho PrivateBinPath này không thuộc thẩm ApplicationBase, họ đang bị bỏ qua.

Vì vậy, bạn cần đảm bảo rằng đường dẫn bạn thêm vào trong ApplicationBase.

Tuy nhiên, tính năng này chỉ hoạt động với app.config. Nếu bạn cần phải làm điều này trong thời gian chạy, sử dụng các sự kiện AssemblyResolve như mô tả trong các tài liệu:

http://msdn.microsoft.com/en-us/library/system.appdomain.assemblyresolve.aspx

+0

Đường dẫn nằm trong ApplicationBase – scottm

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