2009-08-28 6 views
6

Ponieważ AppDomain.AppendPrivatePath() jest przestarzała, staram się dowiedzieć, jak określić PrivateBinPath dla bieżącego AppDomain w moim projekcie, bez obracania się zupełnie nowej AppDomain i możliwość uzyskania do niego później.Jak poprawnie uzyskać dostęp do właściwości PrivateBinPath w bieżącej aplikacji AppDomain?

wiem, że mogę ustawić PrivateBinPath na obiekcie AppDomainSetup (co byłoby w porządku, gdybym chciał stworzyć nową AppDomain), i wiem też, że mogę dodać go do mojego app.config tak:

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

Jednak dodając ten wpis do pliku app.config, właściwość AppDomain.CurrentDomain.SetupInformation.PrivateBinPath ma wartość NULL.

Odpowiedz

6

użytkowania

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

Według http://msdn.microsoft.com/en-us/library/823z9h8w.aspxprivatePath jest już interpretowane jako „podkatalogów aplikacja na katalog podstawowy "... więc podejrzewam, że używanie .\ w jakiś sposób psuje ...

+2

Próbowałem użyć tego, ale nie pracował dla mnie. Właściwość AppDomain.CurrentDomain.SetupInformation.PrivateBinPath jest nadal pusta. –

+1

Wygląda na to, że AppDomain.CurrentDomain.SetupInformation.PrivateBinPath pozostaje pusta, gdy ścieżka próbkowania jest ustawiana przez plik app.config, ale udało mi się potwierdzić, że ścieżka próbkowania jest w rzeczywistości używana w tym przypadku. Calling Assembly.Load i podanie nazwy zespołu w mojej ścieżce sondowania zakończyło się powodzeniem. –

+1

Jak sugeruje ten komentarz, http://stackoverflow.com/questions/33353420/appdomain-currentdomain-setupinformation-privatebinpath-is-null?noredirect=1#comment54508987_33353420 'SetupInformation.PrivateBinPath' zawsze ma wartość NULL dla podstawowej aplikacji. – bitbonk

3

Od docs:

Jeśli katalogi określone dla PrivateBinPath nie są pod ApplicationBase, są ignorowane.

Musisz więc upewnić się, że dodane ścieżki znajdują się w ApplicationBase.

Działa to tylko z app.config. Jeśli trzeba to zrobić w czasie wykonywania, użyć zdarzenia AssemblyResolve opisaną w docs:

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

+0

Ścieżka znajduje się w ApplicationBase – scottm